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' 包含值,但我很好奇这是否正确以及是否存在任何性能问题?
在 SQL Server 中,执行此操作时可以获得隐式转换。有时它不会影响计划或对性能产生明显影响,但有时可能会。他们通常被认为是不好的。针对 AdventureWorks2012 检查这两个查询的计划:
SELECT * FROM Sales.SalesOrderHeader WHERE SalesOrderID = 43659;
SELECT * FROM Sales.SalesOrderHeader WHERE SalesOrderID = '43659';
后者包含一个CONVERT_IMPLICIT
(将鼠标悬停在 CI 搜索的工具提示上)。
您还需要非常小心地进行切换VARCHAR
and NVARCHAR
- 在某些情况下,这对性能来说可能会很糟糕,具体取决于底层数据类型以及文字是否具有N
prefix.
长话短说:不要这样做。编写您的 ORM 事物,以便它理解不同的数据类型并适当地处理它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)