在这里阅读了几个关于SQL问题的答案和评论后,还听到我的一个朋友在一个禁止它们的政策的地方工作,我想知道在MySQL中使用反引号是否有任何问题.
那是:
SELECT `id`, `name`, `anotherfield` ... -- vs -- SELECT id, name, anotherfield ...
Kent Fredric.. 152
使用反引号允许您使用替代字符.在查询编写中它不是一个问题,但如果假设你可以只使用反引号,我会认为它可以让你逃脱像荒谬的东西,如
SELECT `id`, `my name`, `another field` , `field,with,comma`
这当然会产生命名严重的表.
如果你只是简洁,我没有看到它的问题,你会注意到你是否运行你的查询
EXPLAIN EXTENDED Select foo,bar,baz
生成的警告将返回标记和完全限定的表名.因此,如果您正在使用查询生成功能和自动重写查询,反引号会使解析代码的任何事情变得更加困惑.
但是我认为,不是要求你是否可以使用反引号,而是应该有一个名称标准.它解决了更多"真正的"问题.
使用反引号允许您使用替代字符.在查询编写中它不是一个问题,但如果假设你可以只使用反引号,我会认为它可以让你逃脱像荒谬的东西,如
SELECT `id`, `my name`, `another field` , `field,with,comma`
这当然会产生命名严重的表.
如果你只是简洁,我没有看到它的问题,你会注意到你是否运行你的查询
EXPLAIN EXTENDED Select foo,bar,baz
生成的警告将返回标记和完全限定的表名.因此,如果您正在使用查询生成功能和自动重写查询,反引号会使解析代码的任何事情变得更加困惑.
但是我认为,不是要求你是否可以使用反引号,而是应该有一个名称标准.它解决了更多"真正的"问题.
反引号的唯一问题是它们不符合ANSI-SQL,例如它们在SQL Server中不起作用.
如果有可能将SQL移植到另一个数据库,请使用双引号.
对我而言,在处理字段名称时始终使用它们是很有意义的.
首先,一旦你养成习惯,只需按下反击键即可.
其次,对我来说,它可以更容易地查看查询中的字段到底是什么,以及什么是关键字或方法.
最后,它允许您在设计表时使用您希望的任何字段名称.有时命名字段"键","顺序"或"值"是很有意义的...所有这些都需要在引用它们时使用反引号.
反引号不是标准ANSI SQL的一部分.从mysql手册:
如果启用了ANSI_QUOTES SQL模式,则还允许在双引号内引用标识符
因此,如果你使用反引号然后决定离开MySQL,你就会遇到问题(尽管你可能还有很多更大的问题)
如果你继续使用MYSQL没有任何错误,除了查询的视觉效果.但它们允许使用保留关键字或嵌入空格作为表和列名称.对于大多数数据库引擎而言,这是禁忌,并且将在以后阻止任何迁移.
至于易于阅读,许多人对SQL关键字使用上限,例如.
SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
如果你问我,应该总是使用反引号.但是有一些原因可能导致团队不愿意使用它们.
好处:
使用它们,没有保留字或禁止字符.
在某些情况下,您会收到更多描述性错误消息.
如果你避免不好的做法,你就不在乎,但......实际上,有时它们是避免SQL注入的一种不错的方法.
缺点:
它们不是标准的,通常不便携.但是,只要您不使用反引号作为标识符的一部分(这是我能够想象的最糟糕的做法),您可以通过自动删除反引号来移植查询.
如果你的一些查询来自Access,他们可能引用表名称"(也许你不能盲目地删除所有").但是,允许使用反引号和双引号的混合物.
一些愚蠢的软件或功能会过滤您的查询,并且在反引号方面存在问题.但是,它们是ASCII的一部分,因此这意味着您的软件/功能非常糟糕.