MySQL太长varchar截断/错误设置

Mak*_*cha 32 mysql settings varchar

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

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

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

ban*_*nsi 43

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

引自MySQL Documantation.

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

参考:MySQL服务器SQL模式


met*_*766 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 ='';

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