首页/数据/SQL 速查/标识符引用:反引号与双引号

标识符引用:反引号与双引号

表名、列名与保留字冲突时的引用方式:MySQL 用反引号,PostgreSQL 用双引号且区分大小写;跨库 SQL 不要混用。

SQL 速查数据更新于 2026-10-13

标识符该不该加引号

表名、列名与保留字撞车时必须加引用符,两种数据库用的符号不同:MySQL 用反引号,PostgreSQL 用双引号。更值得注意的是引号带来的语义变化——PostgreSQL 里加双引号的名字严格保留大小写,不加引号的名字一律折叠成小写,因此建表时用了大写,之后每次查询都必须带着引号。MySQL 的名字大小写行为则取决于底层文件系统与相关参数设置。

基本信息

适用平台MySQL 8.0 / PostgreSQL 12 及以上
MySQL 引用符反引号;调整为 ANSI 模式后双引号也可用于标识符
PostgreSQL 引用符双引号;未加引号的名字折叠为小写
保留字冲突表列名与保留字同名时必须加引用符
最佳实践命名避开保留字、避免大小写混用,能不加就不加

典型使用场景

  • 表名与保留字撞车,例如 order、group 这类常见词
  • 从其他系统导入的库表名带大写字母或驼峰命名
  • 跨库迁移时核对名字是否一致,避免找不到对象
  • 代码生成器输出带引号的语句,需要确认引号类型是否正确
  • 评审建表语句时统一命名规范,减少长期维护成本

两库引用方式

两库引用方式
-- MySQL:用反引号引用标识符
SELECT `order`, `group` FROM `t_order`;

-- PostgreSQL:用双引号引用标识符
SELECT "order", "Group" FROM t_order;

-- PostgreSQL:加引号后严格区分大小写,不加则折叠为小写
-- 下面两个名字在 PostgreSQL 里是不同的对象:
--   "userName"   ← 保留大写
--   username     ← 折叠为全小写

-- 建表时用了大写,之后查询必须一直带引号,否则找不到对象
-- CREATE TABLE t ("userId" bigint);
-- SELECT "userId" FROM t;

引用规则对照

项目MySQLPostgreSQL
标识符引用符反引号双引号
双引号含义默认是字符串常量是标识符引用符
未加引号的字母大小写行为受配置与文件系统影响一律折叠为小写
加引号后按原样解析严格保留大小写
保留字冲突必须加引用必须加引用
两种数据库互抄 SQL 时最容易踩的就是引号:MySQL 里双引号默认是字符串,PostgreSQL 里双引号是标识符;反过来把反引号抄到 PostgreSQL 会直接语法报错。跨库脚本建议统一用不带引号的规范命名。
MySQL 的表名大小写行为受底层文件系统与相关配置影响,同一套建表脚本在开发机与服务器上表现可能不同。团队规范里统一小写加下划线能规避这类环境差异。

易错点

  • 从 MySQL 抄 SQL 到 PostgreSQL 时沿用反引号,语句直接语法报错
  • 在 PostgreSQL 里建表用了大写名字,后续查询不带引号找不到对象,需要全程加引号
  • 混用引号与大小写,同一批脚本在不同环境里解析出的对象名不一致
  • 用保留字做表名或列名,所有相关语句都要加引用,长期维护成本高
  • 以为加了引号的字符串在两种数据库里含义相同:MySQL 里双引号是字符串,PostgreSQL 里是标识符

数据来源与参考

  • MySQL 8.0 Reference Manual · Schema Object Names
  • PostgreSQL Documentation · Identifiers and Key Words
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌