38

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

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

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

4

3 回答 3

55

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

引用自 MySQL 文档。

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

参考:MySQL 服务器 SQL 模式

于 2013-08-27T07:42:23.897 回答
13

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

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


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

  1. 在下面添加到 my.cnf

    sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

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

    SET @@global.sql_mode='';

请在生产环境中运行之前对其进行测试。

于 2013-08-27T07:26:39.403 回答
1

如果你使用 cpanel ,

代替

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

进入 /usr/my.cnf

sql-mode=""

/etc/init.d/mysql restart
于 2016-05-06T12:23:42.243 回答