MySQL 太长的 varchar 截断/错误设置

问题描述 投票:0回答:3

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

错误 1406 (22001):第 1 行的“xxx”列数据太长

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

mysql settings varchar
3个回答
57
投票

您可以禁用

STRICT_TRANS_TABLES
STRICT_ALL_TABLES
。这允许自动截断插入的字符串。

引自 MySQL 文档。

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

参考:MySQL 服务器 SQL 模式


14
投票

如果未启用严格 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控制台。

    设置@@global.sql_mode='';

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


0
投票

如果您使用 cpanel ,

更换

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

进入/usr/my.cnf

sql-mode=""

奔跑

/etc/init.d/mysql restart
© www.soinside.com 2019 - 2024. All rights reserved.