我有两张桌子。 一个用int作为主键,另一个用varchar主键。
当插入空字符串时("")我得到int的编程错误但成功存储了varchar。 这是如何工作的?
有没有办法让varchar字段不接受空字符串? 我希望他们提供一些我可以捕获的数据库错误。
答案 0 :(得分:3)
当插入空字符串时("")我得到int
的编程错误
因为字符串不是int
。并且无法自动将非数字字符串转换为 int
。
但成功存储了varchar
因为字符串 是varchar
。像CHAR
and VARCHAR
这样的列用于存储字符数据,这就是字符串。
这些值都不是NULL
。 NULL
缺少价值。空字符串仍然是一个值。
答案 1 :(得分:1)
空字符串与null不同。 (在MySQL和许多编程语言中也是如此。)尝试在varchar的主键中插入null。它应该在插入时失败 - 就像int一样。
正如@David所说,空字符串无法转换为int,因此MySQL选择null。
答案 2 :(得分:1)
在几乎每个数据库和ANSI定义中,空字符串都不是NULL
。
Oracle会将空字符串视为NULL
值,这通常会让人感到困惑。但这是SQL语言的一个例外。
答案 3 :(得分:0)
不确定您要做什么,我们需要查看代码以了解解决此问题的最佳方法,但您可以尝试:
CASE WHEN IN_IntValue = '' THEN NULL ELSE IN_IntValue
一般情况下,据我所知,只有Oracle将空字符串视为NULL。在MySQL中,它们是两个不同的东西。