您的位置:首页 > 博客中心 > 数据库 >

[Mysql]由Data truncated for column联想到的sql_mode配置

时间:2022-03-14 03:28

系统日志中出现了

ata truncated for column ‘agent‘ at row 1


mysql出现这个问题的原因,无非就是字符集设置 或者是 字段过长导致的。

mysql在初始化的时候已经统一为utf-8了,所以可以忽略这个问题。
字符串过长从而导入插入失败 一种方式是修改字段长度,可是我这个字段没法知道到底多长存储合适,不太好 一种方式是在程序中截取字符串,这个方法可行,也比较好。
但是我又想了想,以前的时候为啥会自动截断,这次就插入不进去了了呢? 原因是mysql的sql_mode设置的问题,那么就来看看这个配置项吧。
先来看看myql信息
版本 | version                 | 5.0.77-log 

查看sqlmode设置
mysql> SHOW  GLOBAL VARIABLES LIKE ‘%sql_mode%‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode      |       | +---------------+-------+ 1 row in set
也可以这个么查询 mysql> SELECT @@global.sql_mode; +-------------------+ | @@global.sql_mode | +-------------------+ |                   | +-------------------+ 1 row in set
默认这项是空的,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。 这个应该是数据库初始化应该做的工作,这里就是经验的不足。
看下官方文档: 设置项很多,根据需要选择级就可以了。
ANSI:等同于REAL_AS_FLOAT、PIPES_AS_CONCAT和ANSI_QUOTES、IGNORE_SPACE的组合。
ORACLE:等同于PIPES_AS_CONCAT、 ANSI_QUOTES、IGNORE_SPACE、 NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS和NO_AUTO_CREATE_USER的组合。    TRADITIONAL:等同于STRICT_TRANS_TABLES、 STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、 ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER和 NO_ENGINE_SUBSTITUTION的组合。    MSSQL:等同于PIPES_AS_CONCAT、 ANSI_QUOTES、 IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS和 NO_FIELD_OPTIONS的组合。    DB2:等同于PIPES_AS_CONCAT、ANSI_QUOTES、 IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS和NO_FIELD_OPTIONS的组合。    MYSQL323:等同于NO_FIELD_OPTIONS和HIGH_NOT_preCEDENCE的组合。    MYSQL40:等同于NO_FIELD_OPTIONS和HIGH_NOT_preCEDENCE的组合。    MAXDB:等同于PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS和 NO_AUTO_CREATE_USER的组合。
修改配置:
首先设置本次mysql进程有效,然后在配置文件中在设置,保证一直生效,我想让myql截取保存,所以用ansi模式。

当前进程
mysql> set global sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER';

配置文件
sql-mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER'

设置完之后进入mysq检查一下
参考:

本文出自 博客,转载请务必保留此出处

作者 采用协议


热门排行

今日推荐

热门手游