MySQL太长varchar截断/错误设置

时间:2013-08-27 07:12:36

标签: mysql settings varchar

我有两个MySQL实例。第一个在数据太长时截断插入的字符串。第二个引发了一个错误:

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

我希望第二个截断数据。 是否有任何MySQL设置来管理此行为?

3 个答案:

答案 0 :(得分:39)

您可以停用STRICT_TRANS_TABLESSTRICT_ALL_TABLES。这允许自动截断插入的字符串。

来自MySQL Documantation的引用。

  

严格模式控制MySQL处理无效或缺失值的方式   数据更改语句,如INSERT或UPDATE。值可以是   因几个原因无效。例如,它可能包含错误的数据   列的类型,或者可能超出范围。缺少值   当要插入的新行不包含非NULL值时   在其定义中没有显式DEFAULT子句的列。 (为一个   NULL列,如果缺少值,则插入NULL。)

参考:MySQL Server SQL Modes

答案 1 :(得分:10)

如果未启用严格SQL模式,并且您为CHAR或VARCHAR列分配的值超出了列的最大长度,则会截断该值以使其适合并生成警告。对于非空格字符的截断,可以导致发生错误(而不是警告),并通过使用严格的SQL模式来禁止插入值。请参见第6.1.7节“服务器SQL模式”。

如何更改它: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


找到两种禁用严格模式的方法:

  1. 将以下内容添加到my.cnf

    SQL模式= “NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

  2. 方式是使用mysql控制台。

    SET @@ global.sql_mode ='';

  3. 请在生产环境中运行之前测试它们。

答案 2 :(得分:1)

如果你使用cpanel,

替换

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

进入/usr/my.cnf

sql-mode=""

运行

/etc/init.d/mysql restart