如何用SQL查询包含特殊字符的字段名?是否应使用方括号或反引号?
- 内容介绍
- 相关推荐
本文共计911个文字,预计阅读时间需要4分钟。
SQL Server 不允许直接写入带空格的列名,如 `SELECT user name FROM users` 这种写法会导致错误 `Incorrect syntax near 'name'`。必须使用方括号 `[[user name]]` 来显式标记识别符号边界。
常见触发场景包括:字段名含空格、连字符、中文、以数字开头(如 2nd_score),或撞上保留字(如 order、desc)。方括号是 SQL Server 唯一标准方式,反引号在这里无效。
- 正确写法:
SELECT [user name], [2nd_score], [order] FROM orders - 嵌套使用也合法:
SELECT [user].[name] FROM [dbo].[users](表名和列名都可括) - 注意:方括号不能嵌套,
[[name]]表示字面量[name],不是转义
MySQL 中反引号是唯一安全的字段名转义方式
MySQL 默认不认方括号,强行用会报错 You have an error in your SQL syntax。必须用反引号 ` 包裹特殊字段名,比如 `user name` 或 `order`。
反引号对所有非标准标识符都有效,包括含空格、点号、中文、保留字,甚至含反引号本身(需双写:`` 表示单个 ` 字符)。
本文共计911个文字,预计阅读时间需要4分钟。
SQL Server 不允许直接写入带空格的列名,如 `SELECT user name FROM users` 这种写法会导致错误 `Incorrect syntax near 'name'`。必须使用方括号 `[[user name]]` 来显式标记识别符号边界。
常见触发场景包括:字段名含空格、连字符、中文、以数字开头(如 2nd_score),或撞上保留字(如 order、desc)。方括号是 SQL Server 唯一标准方式,反引号在这里无效。
- 正确写法:
SELECT [user name], [2nd_score], [order] FROM orders - 嵌套使用也合法:
SELECT [user].[name] FROM [dbo].[users](表名和列名都可括) - 注意:方括号不能嵌套,
[[name]]表示字面量[name],不是转义
MySQL 中反引号是唯一安全的字段名转义方式
MySQL 默认不认方括号,强行用会报错 You have an error in your SQL syntax。必须用反引号 ` 包裹特殊字段名,比如 `user name` 或 `order`。
反引号对所有非标准标识符都有效,包括含空格、点号、中文、保留字,甚至含反引号本身(需双写:`` 表示单个 ` 字符)。

