关于mysql Warning 1292,mysql5.5&mysql5.6

执行画面保存操作,出了系统错误。查询了log

Data truncation: Truncated incorrect INTEGER value: '';

数据库用的是mysql5.6

但是我改为前一阵用的 mysql5.5 就没有出现这个错误。
就奇怪了,因为这俩数据库数据是一样的。
百度了一下,可能与数据库模式有关系,于是在mysql命令行 查询数据库模式&执行报错sql
5.5

查询数据库模式
mysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+

执行报错sql(仿照真实sql写的,真实sql是insert语句)
mysql> SELECT CONVERT('', UNSIGNED);
+-----------------------+
| CONVERT('', UNSIGNED) |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)

5.6

查询数据库模式
mysql> select @@sql_mode;
+------------------------+
| @@sql_mode             |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+

执行报错sql(仿照真实sql写的,真实sql是insert语句)
mysql> SELECT CONVERT('', UNSIGNED);
+-----------------------+
| CONVERT('', UNSIGNED) |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)



网上查询说,

sql_mode设置为空或仅NO_ENGINE_SUBSTITUTION都是宽松无敌模式

而命令行执行sql确实也都报的警告。

系统错误的根本原因是数据库数据错误。
但是
为什么工程连接mysql5.5就能插入数据。连接mysql5.6就报系统错误呢???求大神解答!

阅读 2.8k
1 个回答

依赖于隐式的类型转换可能意味着不容易排查的逻辑错误,最好遵循新的提示改进代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题