MySQL报错1406_MySQL #1406 Data too long错误
造成这个错误有两种可能
1)仔细检查sql语句 是不是插入值颠倒了位置
2)java端与mysql表编码不一致:
1.修改Server端编码。修改character_set_xxx
2.在JDBC-URL连接后面加上&useUnicode=true&characterEncoding=UTF8
3.修改my.ini文件
去掉sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"中的STRICT_TRANS_TABLES
3)mysql采用非"utf-8"编码
STRICT_TRANS_TABLES
是 MySQL 数据库中的一个 SQL 模式,用于控制事务提交时对数据完整性和类型检查的严格程度。
在 STRICT_TRANS_TABLES
模式下,如果 INSERT 或 UPDATE 操作执行时发现数据类型不匹配或值超出了列的范围,MySQL 就会拒绝这些操作并抛出错误,从而保证了数据的完整性和一致性。
具体来说,STRICT_TRANS_TABLES
模式将执行以下校验:
- 发生截断警告:如果插入的字符串长度超过了定义的列长度,MySQL 会截断该字符串并向客户端发送一个警告。
- 严格的类型检查:如果插入的值与表定义的列类型不匹配,MySQL 将拒绝该操作并返回错误。
- 零值插入:在
NOT NULL
列上进行零值插入时,MySQL 将拒绝该操作并返回错误。
在默认的 SQL 模式下,MySQL 只会在发生截断时向客户端发送警告,而不会阻止插入或更新操作。因此,开启 STRICT_TRANS_TABLES
模式可以更加严格地控制数据库的数据完整性,但也可能会限制某些数据操作。
需要注意的是,对于早期版本的 MySQL,STRICT_TRANS_TABLES
模式可能会影响性能。因此,在大多数情况下,建议选择较新的 MySQL 版本并开启该模式以提高数据完整性。
————————————————
版权声明:本文为CSDN博主「myds1991」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/myds1991/article/details/42881629