当我运行时:
INSERT INTO `orders` (`order_id`) VALUES ('50261111111s11');
插入以下内容:
order_id =>的 2147483647
字段order_id是INT类型,所以我假设这是根本原因。我没有得到的是为什么它将它转换为该数字。我通常希望它插入0,因为我在那里使用了字母字符。是什么给了什么?
答案 0 :(得分:3)
首先,字符串'50261111111s11'
为implicitly coerced至50261111111
1 。
然后它被限制在2147483647
2 ,这是MySQL中的maximum value for an INT field。
(除非订单ID 是一个约束整数,这样的自动增量键,也许它应该是CHAR / VARCHAR列?)
1 请参阅INSERT statement:
如果表达式的类型与列的类型不匹配,则可能涉及[隐式]类型转换,并且根据数据类型转换给定值可能导致不同的插入值。
(MySQL可能实现对INT的直接转换/截断,但考虑提供的值为CONVERT("50261111111s11", SIGNED INTEGER)
的情况 - 结果为50261111111,而不是0.)
2 来自11.2.6 Out-of-Range and Overflow Handling:
如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝带有错误的超出范围的值,并且插入失败。
如果未启用限制模式, MySQL会将值剪辑到范围的相应端点,并存储结果值。
答案 1 :(得分:-1)
您在int字段中插入字符串... VALUES('50261111111 ** s 11'),您应该将order_id更改为varchar