我有两个 MySQL 实例。当数据太长时,第一个在插入时截断字符串。第二个引发错误:
ERROR 1406 (22001): Data too long for column 'xxx' at row 1
我希望第二个也截断数据。是否有任何 MySQL 设置来管理这种行为?
您可以禁用STRICT_TRANS_TABLES
和STRICT_ALL_TABLES
。这允许自动截断插入的字符串。
引用自 MySQL 文档。
严格模式控制 MySQL 如何处理数据更改语句(如 INSERT 或 UPDATE)中的无效或缺失值。一个值可能由于多种原因而无效。例如,它可能具有错误的列数据类型,或者可能超出范围。当要插入的新行不包含在其定义中没有显式 DEFAULT 子句的非 NULL 列的值时,缺少值。(对于 NULL 列,如果缺少值,则插入 NULL。)
如果未启用严格 SQL 模式并且您为 CHAR 或 VARCHAR 列分配的值超过了列的最大长度,则该值将被截断以适应并生成警告。对于非空格字符的截断,您可能会导致发生错误(而不是警告)并使用严格的 SQL 模式禁止插入值。请参见第 6.1.7 节,“服务器 SQL 模式”。
如何更改它: http ://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
找到了两种禁用严格模式的方法:
在下面添加到 my.cnf
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
方法是使用mysql控制台。
SET @@global.sql_mode='';
请在生产环境中运行之前对其进行测试。
如果你使用 cpanel ,
代替
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
进入 /usr/my.cnf
至
sql-mode=""
跑
/etc/init.d/mysql restart