gpt4 book ai didi

mysql - 可以用单引号将 SQL 语句中的所有值括起来吗?

转载 作者:可可西里 更新时间:2023-11-01 07:46:56 26 4
gpt4 key购买 nike

可以用单引号将 SQL 语句中的所有值括起来吗?例如:

这是一个名为 books 的简单表:

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 搜索的工具提示上)。

您还需要非常小心地在 VARCHARNVARCHAR 之间切换 - 在某些情况下,这可能会影响性能,具体取决于底层数据类型以及文字具有 N 前缀。

长话短说:不要这样做。随意编写您的 ORM,以便它了解不同的数据类型并适本地处理它们。

关于mysql - 可以用单引号将 SQL 语句中的所有值括起来吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com