MySQL Update更新数据时,数据超过varchar长度却不报错,自动截取

场景

开发环境中进行更新数据库中的数据时,偶然发现数据超过varchar的长度,数据库没有报错,而是自动进行了数据截取并保存了.

原因

经过确认,是因为sql_mode的设置导致的,

select @@SESSION.sql_mode

因为没有设置严格模式,所以更新成功.

设置为严格模式:

SET SESSION sql_mode = 'STRICT_TRANS_TABLES';

直接更新失败.

ANSI 如果不设置模式,默认就是这个

ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。

TRADITIONAL

TRADITIONAL 模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。

STRICT_TRANS_TABLES

STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。

结尾

如果需要设置严格模式,建议修改数据库配置my.cnf里的sql_mode,重启数据后永久有效.

猜你喜欢

转载自blog.csdn.net/cainiao1412/article/details/109779242