在下面的 SQL 语句中,SQLite 正确排序但 MySQL 没有:
但是,如果我不在字段名称周围包含引号,它可以正常工作:
如果字段用引号定义,谁能解释 MySQL 而不是 SQLite 不能正确排序的行为?
"TotalOrders"
(带双引号)是一个常量字符串 - 按它排序不会做任何事情......本质上你会得到未排序的行序列,这似乎是正确排序的。
你要
ORDER BY `TotalOrders`
带反引号。这是列标识符。
除了欧根的回答:
值得注意的是,这种行为取决于 MySQL 的配置。
所描述的行为仅显示 MySQL 是否保留在默认 - 非标准兼容配置中。
如果将其配置为在“ANSI 模式”下运行,则双引号不用于字符串文字,而是用于标识符(几乎与所有其他 DBMS 一样)。
该问题的另一个解决方案是通过将 SQL_MODE 更改为“ANSI”来使 MySQL 符合 SQL 标准。
然后标准兼容的单引号用于文字,双引号用于标识符。