我有两个MySQL实例。当数据太长时,第一个字符串会在插入时截断字符串。第二届一个引发错误:MySQL太长varchar截断/错误设置
ERROR 1406 (22001): Data too long for column 'xxx' at row 1
我想:第二个截断数据也是如此。 是否有任何MySQL设置来管理此行为?
我有两个MySQL实例。当数据太长时,第一个字符串会在插入时截断字符串。第二届一个引发错误:MySQL太长varchar截断/错误设置
ERROR 1406 (22001): Data too long for column 'xxx' at row 1
我想:第二个截断数据也是如此。 是否有任何MySQL设置来管理此行为?
您可以禁用STRICT_TRANS_TABLES
和STRICT_ALL_TABLES
。这允许自动截断插入的字符串。
来自MySQL Documantation的引用。
Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)
这也是我的问题的答案 –
顺便说一句 - 下面的方法不应该被认为是有效的 - 你需要在你的my.cnf中设置sql模式 - 但你不需要NO_AUTO_CREATE_USER或任何其他的,你只需要确保你没有STRICT_TRANS_TABLES或STRICT_ALL_TABLES或其他任何传播此警告的东西。事实上,sql-mode =''也会修复错误。 – Ross
如果未启用严格SQL模式,并且将值分配给超过列最大长度的CHAR或VARCHAR列,则该值将被截断以生成警告并生成警告。要截断非空格字符,可以导致发生错误(而不是警告),并通过严格的SQL模式禁止插入值。请参见第6.1.7节“服务器SQL模式”。
你可以如何改变它: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
发现了两个方法来禁用严格模式:
添加下面my.cnf文件
SQL模式=“NO_AUTO_CREATE_USER ,NO_ENGINE_SUBSTITUTION“
方式是使用mysql控制台。
SET @@ global.sql_mode ='';
请在生产环境中运行之前测试它们。
SET @@ global.sql_mode ='';作为一种魅力 –
,如果您使用的cPanel,
更换
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
到/usr/my.cnf
到
sql-mode=""
运行
/etc/init.d/mysql restart
什么是文件类型与列的长度是多少?你是否有相同的值,相同的两个服务器上提交 –
@ metalfight-user868766不理解你关于文件类型的问题。引擎是InnoDB,列类型 - varchar。列长度不会改变。是的,数据库几乎完全相同。 –
什么样的错误? – 7alhashmi