繁体   English   中英

避免在INT字段mysql中插入varchar字符串

[英]avoid insert varchar string in a INT field mysql

我有一个mysql表:

id int
user_id int
date datetime

发生的是,如果我在user_id中插入varchar字符串,则mysql会将此字段设置为0。

我可以防止在mysql中插入吗? 如果是字符串,请不要转换为0并插入。

如果int列不可为空,则类似这样的事情可以作为过滤器(取决于设置,MySQL可能只是将NULL转换为0):

INSERT INTO theTable(intField) 
VALUES (IF(CAST(CAST('[thevalue]' AS SIGNED) AS CHAR) = '[thevalue]', '[thevalue]', NULL))
;

如果您有机会在将值插入数据库之前对其进行处理和验证,请在此处进行操作。 不要将这些检查视为“手动”,这是荒谬的。 它们是必需的,这是标准做法。

MySQL的理念是“按我的意思行事”,这通常会导致类似的麻烦。 如果为整数字段提供字符串,则将尽最大努力将其转换,并且在数字无效的情况下,它将简单地转换为0 ,因为它可以获得最接近的数字。 例如,它还会悄悄地截断太长的字符串字段,就好像您在乎其他数据一样会使列变大。

这与许多其他对插入数据类型非常挑剔的数据库截然相反。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM