当我插入"' 50261111111s11"时,它会插入2147483647

时间:2014-05-08 21:05:23

标签: mysql

当我运行时:

INSERT INTO `orders` (`order_id`) VALUES ('50261111111s11');

插入以下内容:

order_id =>的 2147483647

字段order_id是INT类型,所以我假设这是根本原因。我没有得到的是为什么它将它转换为该数字。我通常希望它插入0,因为我在那里使用了字母字符。是什么给了什么?

2 个答案:

答案 0 :(得分:3)

首先,字符串'50261111111s11'implicitly coerced50261111111 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