【发布时间】:2013-03-19 12:47:34
【问题描述】:
可以用单引号将 SQL 语句中的所有值括起来吗?例如:
这是一个叫做书的简单表格:
id | title
1 | Some book name
2 | Second book name
这样写语句可以吗:
SELECT * FROM books WHERE id = '1'
我已经在 SQL Server 2008 和 MySQL 5 中测试了该查询,它运行良好,但我很好奇是否存在任何性能问题,因为 ID 字段实际上是整数。
第二个问题可以这样写:
SELECT * FROM books WHERE id = N'1'
N 前缀在 SQL Server 中用于 UTF-8 字段,但我已经在 SQL Server 和 MySQL 中对其进行了测试,并且都可以正常工作。我不知道 SQLite 是否支持 N 前缀,因为我没有测试过。
我问这个的原因是因为我正在构建可以与流行的 SQL 数据库(SQL Server、MySQL、SQLite 和 MS Access)一起使用的数据库类,所以在执行选择、插入或更新数据时我不会必须担心字段数据类型。我总是可以用 N'Some value' 括起来值,但我很好奇这是否正确,是否存在任何性能问题?
【问题讨论】:
-
我完全迷路了。你
don't have to worry about field datatype?那么这意味着验证会立即消失吗? -
在构建多数据库 ORM(或任何您想称呼它的任何名称)时,您当然需要支持不同的语法。不妨从这一点开始 - 另外,请记住 SQLite 具有类型值并且只有松散列 type affinity。
-
(当然,当使用占位符/准备好的语句时——每个受人尊敬的数据库适配器都应该支持——语法wrt。引用在很大程度上是无关紧要的,即使类型转换可能仍然适用。)
标签: mysql sql sql-server database tsql