1

它可能取决于数据库类型,但是否有偏好(由数据库而不是编码器)还是使用引号更好?是吗:

  • 快点?
  • 更不容易出错?
  • 有助于防止注射(是否使用 PDO)?

假设没有任何东西需要使用(空格、保留字等)。

MySQL:

SELECT `id` FROM `table` WHERE `name` = '$name';

ANSI:

SELECT "id" FROM "table" WHERE "name" = '$name';

与:

SELECT id FROM table WHERE name = $name;

这个答案谈到了在 MySQL 中使用引号的要求,但我感兴趣的是什么时候数据库不需要它,但对于我上面列出的方面(也许更多)来说,它可能是首选/更好的。

4

4 回答 4

4

标识符周围的引号仅在查询解析阶段使用 - 该阶段通过 SQL 语句并找出其句法元素。与其他阶段(查询优化、查询执行和将结果返回给调用者)相比,解析阶段相对较短。因此,无论您的特定 RDBMS 是什么,您都不应该期望在标识符周围使用引号引起任何可测量的加速或减速。

就或多或少容易出错而言,多部分标识符周围缺少引号在开发阶段很快就会变得很明显,因此在任何地方放置引号的做法都是不值得麻烦的,因为对人类的可读性会受到很大影响。

最后,在标识符周围添加引号不会帮助您防止注入攻击;不在所有标识符周围加上引号也是如此。许多 SQL 脚本生成器采用这种方法来避免if在脚本中测试标识符是否为多部分的语句。

引用所有标识符是一个好主意的唯一情况是当您以编程方式生成 SQL 时,结果并不适合人类读者。

于 2013-01-02T16:32:15.940 回答
3

我不喜欢使用带引号的标识符。它们打字的时间太长,而且代码混乱,使人类更难阅读。

此外,我更倾向于不鼓励在 SQL 中使用保留字作为标识符。对我来说,这只是一个好习惯。我的意思是,谁想阅读以下内容:

select `select`, `from` as `as`
from <some really messed up table>
于 2013-01-02T16:34:26.437 回答
0

我使用底部版本,因​​为我发现它更易于阅读,但这取决于您回应查询的方式。性能没有差异,因为它会读取引号,除非需要,因此除非在包含多个变量的查询中编写 WHERE 子句,否则您真的不知道它。

于 2013-01-02T16:35:29.130 回答
-1

我想说不要对数字标识符使用引号会更快;为什么要将数据类型转换的潜在开销添加到您希望(大概)尽可能高性能的查询中?

于 2013-01-02T16:30:09.050 回答