不,不需要在数字文字周围加上引号。
对于 MySQL,如果数字文字用单引号括起来就可以了;我认为我们经常看到它这样做的原因是为了方便程序员不必关心它是字符还是数字,只需在所有文字周围加上引号即可。
当值不是数字文字时,引用值和不引用值时的行为有所不同。例如,给定一个id
类型为 的列INTEGER
,在这种情况下
... WHERE id = '1X'
这里'1X'
将被解释为值为 1 的文字数字,但在此上下文中
... WHERE id = 1X
这里1X
将被解释为列名,而不是数字文字。这可能会导致 MySQL 抛出“未知列”异常。
考虑如何解释这些差异......
... WHERE id = 'id' -- 'id' will be interpreted as numeric literal value 0
... WHERE id = id -- id will be interpreted as a column name
因此,当您期望被解释为数字文字的东西不是数字时,它真的归结为哪种行为最适合您的应用程序。
我个人的偏好是不引用数字文字。这可能是由于我使用其他 DBMS 的经验以及需要避免由隐式数据转换引起的问题。我个人的偏好也是使用准备好的语句,并避免我的语句在 SQL 文本中包含值作为文字。(对于 MySQL,这一点主要是没有意义的,因为带有绑定变量的准备好的语句在发送到数据库时会转换为纯 SQL 文本......但这是由 MySQL 库完成的,而不是我的代码。再说一次,这是偏好可能最了解我使用其他 RDBMS(Oracle、Teradata、DB2、SQL Server)而不是 MySQL 本身的长期经验。