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

时间:2015-10-13 17:10:42

标签: mysql

我有一个mysql表:

AVSpeechSynthesizer

如果我在user_id中插入varchar字符串,mysql会插入此字段将其设置为0。

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

2 个答案:

答案 0 :(得分:1)

如果int列不可为空,那么可能可用作过滤器(取决于设置,MySQL可能只是将NULL转换为0):

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

答案 1 :(得分:0)

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

MySQL的哲学是“做我的意思”,这往往导致这样的麻烦。如果为整数字段提供字符串,它将尽力转换它,如果数字无效,它将简单地转换为0,因为它可以获得最接近的字符串。它还会悄悄地截断太长的字符串字段,例如,就好像你关心了额外的数据一样,你会使你的列更大。

这与许多其他数据库完全相反,这些数据库对于可插入的数据类型非常挑剔。