SQL及谷歌云SQL中单引号(')与双引号(")的使用规范
SQL引号使用场景及选择指南
单引号(' '):字符串常量的标准写法
- 专门用来包裹字符串类型的数据,比如文本、部分数据库中的日期值,这是SQL标准规定的写法,所有数据库都兼容。
- 示例:
SELECT * FROM users WHERE name = 'Alice'; INSERT INTO logs(content) VALUES ('用户登录成功'); - 如果字符串本身包含单引号,用两个单引号转义就行,比如:
'I''m a developer'。
双引号(" "):标识符的可选包裹(看数据库规则)
- 主要用于包裹表名、列名这类标识符,但不同数据库的规则不一样:
- PostgreSQL、SQLite 默认支持用双引号包裹标识符,而且会区分大小写,比如:
SELECT "UserName" FROM "UserTable"; - MySQL 默认把双引号当成单引号用(用来包裹字符串),只有开启
ANSI_QUOTES配置后,才会把双引号当作标识符包裹符。 - SQL Server 一般不用双引号,除非开了特定设置。
- PostgreSQL、SQLite 默认支持用双引号包裹标识符,而且会区分大小写,比如:
- 有些数据库里双引号也能包裹字符串,但这不符合标准,容易混淆,别这么用。
反引号( ):MySQL专属的标识符包裹符
- 这是MySQL独有的写法,专门解决标识符和关键字重名、或者标识符带特殊字符(空格、连字符)的问题。
- 示例:
SELECT `user` FROM `user-info`; -- user是关键字,user-info有特殊字符 - 其他数据库(比如PostgreSQL、SQL Server)不认识反引号,别乱用。
什么时候完全不用引号?
- 处理整数、浮点数这类数值类型时,直接写数值就行,加引号反而会让数据库把数值当字符串处理,可能出问题:
SELECT * FROM orders WHERE total > 100.5; - 用内置函数、合法标识符(不跟关键字重名、没特殊字符)的时候,也不需要引号:
SELECT COUNT(*) FROM users; -- COUNT是函数,users是合法表名
选引号的实用建议
- 字符串值:优先用单引号,兼容性拉满,符合标准。
- 标识符:
- 尽量别用关键字或特殊字符当标识符,这样完全不用包裹符最省心。
- 必须包裹的话:MySQL用反引号,PostgreSQL这类支持ANSI标准的用双引号,别混着用。
- 数值类型绝对别加引号,避免性能损耗或计算错误。
内容的提问来源于stack exchange,提问作者Misael Jaramillo-Rivera
相关产品推荐
相关产品推荐

