场景:有的时候切换数据库 或者重构迁移数据,源数据表和目标数据表数据类型不一致的时候会提示:Incorrect integer value:’ ’ for column columnname
检查源表和目标表,确实会发现字段类型发生了变化,但数据值其实并没有超出目标表字段数据类型
处理方案: 方式一,强制处理 源表的源字段的数据值;
方式二、检查 目标表的数据库的配置参数sql_mode
调整sql_mode,可以通过set @@global.sql_mode = ''
或者修正 在my.cnf修正如下配置
[mysqld]
sql_mode=''
ps:
1、修改sql_mode ,尤其调整到宽松模式,注意更容产生异常边界数据出来。默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入
2、sql_mode 的常用参数值:
mysql5.0以上版本支持常见几种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。 TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。
具体更多参数说明:
http://www.jb51.net/article/28018.htm