INSERT IGNORE和STRICT模式

当STRICT模式打开时,如果您尝试将无效值使用INSERT插入表中,MySQL将返回错误并中止语句。

但是,如果您使用INSERT IGNORE语句,MySQL将发出警告而不是错误。此外,在将值添加到表之前,它将尝试调整值以使其有效

请考虑以下示例。

首先,我们创建一个的新表名为tokens:

CREATE TABLE tokens (
    s VARCHAR(6)
); 

在此表中,列s仅接受长度小于或等于6的字符串。

其次,将长度为7的字符串插入tokens表中。

INSERT INTO tokens VALUES('abcdefg'); 

MySQL发出以下错误,因为严格模式已启用。

ERROR 1406 (22001): Data too long for column 's' at row 1

第三,使用INSERT IGNORE语句插入相同的字符串。

INSERT IGNORE INTO tokens VALUES('abcdefg'); 

MySQL在将数据插入tokens表之前截断了数据。此外,它会发出警告。

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 's' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

数据库结果

SELECT * FROM `tokens`;