面试题答案
一键面试- 严格模式(
sql_mode
包含STRICT_TRANS_TABLES
):- 若插入的数据长度超过
VARCHAR
列定义的最大长度,MySQL 会抛出错误,并且插入操作失败,整个事务回滚(如果在事务中)。例如:
上述插入语句会报错,错误信息类似SET sql_mode = 'STRICT_TRANS_TABLES'; CREATE TABLE test_table (col VARCHAR(5)); INSERT INTO test_table (col) VALUES ('abcdef');
Data too long for column 'col' at row 1
。 - 若插入的数据长度超过
- 非严格模式(
sql_mode
不包含STRICT_TRANS_TABLES
):- MySQL 会对数据进行截断处理,只保留最大长度限制内的数据,然后插入成功。例如:
此时,插入的数据SET sql_mode = ''; CREATE TABLE test_table (col VARCHAR(5)); INSERT INTO test_table (col) VALUES ('abcdef');
abcdef
会被截断为abcde
并成功插入。同时,MySQL 会产生一个警告,可以通过SHOW WARNINGS
查看警告信息,类似Truncated incorrect VARCHAR value: 'abcdef'
。