假设您有一列int(也是位等)
CREATE TABLE TEST (a int)
如果您使用'1'或2
插入值似乎无关紧要INSERT INTO TEST VALUES ('1')
INSERT INTO TEST VALUES (2)
如果我通过为任何列类型单引号(例如'value')来插入/更新值,是否有任何副作用?
答案 0 :(得分:3)
SQL Server将根据联机丛书https://msdn.microsoft.com/en-us/library/ms190309.aspx中记录的数据类型优先级规则隐式转换数据类型。整数具有更高的优先级,因此在示例中字符串文字将转换为整数。缺点是SQL Server要做的工作要多一点,但开销可能并不重要。
但是,请注意JOIN
和WHERE
子句中表达式的隐式转换。如果比较列被索引并且具有较低的优先级,则不能有效地使用索引并且可能需要扫描。这是Unicode文字/参数和varchar列的常见问题。
最好匹配类型以获得最佳性能并避免歧义。
答案 1 :(得分:2)
好问题。这只是不好的做法。如果你没有使用mysql,另一个db肯定会对你大喊大叫,你会感到困惑。另外,我想如果你加载了一个更大的数据集,它可能会更慢,因为必须在幕后进行解析。