我有一个mysql表:
AVSpeechSynthesizer
如果我在user_id中插入varchar字符串,mysql会插入此字段将其设置为0。
我可以在mysql中阻止此插入吗?如果是字符串,请不要转换为0并插入。
答案 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
,因为它可以获得最接近的字符串。它还会悄悄地截断太长的字符串字段,例如,就好像你关心了额外的数据一样,你会使你的列更大。
这与许多其他数据库完全相反,这些数据库对于可插入的数据类型非常挑剔。