我有两个 MySQL 实例。当数据太长时,第一个会在插入时截断字符串。第二个引发错误:
错误 1406 (22001):第 1 行的“xxx”列数据太长
我希望第二个也能截断数据。 是否有任何 MySQL 设置来管理此行为?
您可以禁用
STRICT_TRANS_TABLES
和 STRICT_ALL_TABLES
。这允许自动截断插入的字符串。
引自 MySQL 文档。
严格模式控制 MySQL 如何处理无效或缺失值 数据更改语句,例如 INSERT 或 UPDATE。一个值可以是 由于多种原因无效。例如,它可能有错误的数据 列的类型,否则可能超出范围。缺少一个值 当要插入的新行不包含非 NULL 值时 其定义中没有显式 DEFAULT 子句的列。 (为一个 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控制台。
设置@@global.sql_mode='';
请在生产环境中运行之前对其进行测试。
如果您使用 cpanel ,
更换
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
进入/usr/my.cnf
到
sql-mode=""
奔跑
/etc/init.d/mysql restart