首页/数据/SQL 速查/比较运算符与排序规则影响

比较运算符与排序规则影响

=、<>、>、< 等比较运算的写法与两个高频细节:字符串比较受排序规则影响(大小写敏感性);与 NULL 比较需要专门语法。

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

比较运算符是什么

比较运算符把两个表达式比出 TRUE / FALSE / UNKNOWN 三种结果,是 WHERE、JOIN ON、HAVING 判定的基础。等值用 =,不等推荐 <>;字符串比较的大小写敏感性由排序规则(collation)决定,不是由运算符本身决定,这是跨库迁移最常见的意外之一。

基本信息

等值= 完全相等;比较前先按类型协商规则统一两侧类型
不等<> 与 != 等价,标准写法是 <>
大小比较> >= < <= 适用于数字、日期与可排序字符串
NULL 安全等值MySQL 用 <=>;PostgreSQL 用 IS NOT DISTINCT FROM
判空IS NULL / IS NOT NULL,不要写 = NULL
范围缩写BETWEEN a AND b 等价 a <= x AND x <= b,两端都为闭区间

示例与大小写

示例与大小写
SELECT * FROM users
WHERE level >= 3 AND level <> 9;          -- 组合范围与不等

SELECT * FROM users WHERE name = BINARY 'Tom';   -- MySQL:强制按字节比较

SELECT 'a' = 'A';   -- MySQL 默认排序规则(utf8mb4_0900_ai_ci):1
SELECT 'a' = 'A';   -- PostgreSQL 默认排序规则:f

SELECT NULL <=> NULL;   -- MySQL:1,NULL 之间视为相等

结果差异对照

表达式MySQL 8PostgreSQL
'a' = 'A'1(_ci 排序规则不区分大小写)f(默认区分大小写)
NULL = NULLNULL(不成立)NULL
NULL <=> NULL1不支持;用 IS NOT DISTINCT FROM
'10' = 101(字符串隐式转数字)报错:operator does not exist
'Tom' IN ('tom')1f
col = BINARY 'Tom'按字节比较,区分大小写不支持 BINARY 关键字;用 COLLATE "C"

典型使用场景

  • 范围过滤:金额、时间、等级的上下界判定
  • 精确匹配枚举值:状态、类型这类低基数字段
  • 判空与补空:IS NULL 找缺失数据,与 COALESCE 配合出报表
  • 关联条件中比较两侧键,注意类型必须一致才能走索引
  • 迁移校验时对比两库结果集,先确认排序规则是否会造成命中差异
  • 范围写法二选一:BETWEEN a AND b 更短,x >= a AND x < b 能表达半开区间,取时间窗口时后者更常用
MySQL 排序规则后缀 _ci 不区分大小写、_cs 区分、_bin 按字节比较;PostgreSQL 用数据库或列的 collation,可在查询里用 COLLATE "C" 临时覆盖为字节序比较。排序规则也会影响索引:同一列上的索引按列自身的排序规则排序,改写查询的 COLLATE 可能让索引失效。
NOT IN 的列表里只要出现一个 NULL,整个条件就恒为 UNKNOWN,查询返回 0 行且不报错。子查询结果可能含 NULL 时要改用 NOT EXISTS,或在子查询里加 IS NOT NULL 过滤。

易错点

  • 用 = NULL 判空:结果为 UNKNOWN,筛选结果为空却不报错,排查时容易误判成“数据缺失”,应写 IS NULL
  • NOT IN 子查询含 NULL:条件恒不成立、返回 0 行,改成 NOT EXISTS 或给子查询加 IS NOT NULL
  • 忽略 _ci 排序规则:MySQL 下 'Tom' 与 'tom' 被判定相等,唯一索引也会因此拒绝插入另一条,需要区分大小写时显式 COLLATE 或改列排序规则
  • 两列字符集或排序规则不一致时比较:MySQL 报 Illegal mix of collations,要用 COLLATE 统一到同一规则

数据来源与参考

  • MySQL 8.0 Reference Manual · Comparison Functions and Operators
  • PostgreSQL Documentation · Comparison Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌