typora/daliy_note/8月归档/8.29/mysql.md
2024-12-12 10:48:55 +08:00

1.7 KiB
Raw Blame History

mysql where 条件大小写

在 MySQL 中,WHERE 条件的大小写敏感性取决于所使用的字符集和排序规则collation

1. 默认行为

  • 大小写不敏感在大多数情况下MySQL 的默认字符集 latin1utf8 使用的排序规则(如 latin1_swedish_ciutf8_general_ci)都是不区分大小写的。这意味着在这些排序规则下,WHERE 子句将不会区分大小写。例如:

    SELECT * FROM users WHERE username = 'JohnDoe';
    

    该查询将返回 johnDoeJOHNDOEJohnDoe 等所有变体。

2. 大小写敏感

  • 使用大小写敏感的排序规则:如果你想要 WHERE 条件区分大小写,可以使用大小写敏感的排序规则,例如 latin1_binutf8_bin。例如:

    SELECT * FROM users WHERE BINARY username = 'JohnDoe';
    

    使用 BINARY 关键字会强制 MySQL 将 username 列的值视为二进制字符串,从而实现大小写敏感的比较。

  • 指定排序规则:你也可以在查询中显式指定排序规则。例如:

    SELECT * FROM users WHERE username COLLATE utf8_bin = 'JohnDoe';
    

3. 修改表字符集

  • utf8_general_ci --不区分大小写
  • utf8_bin区分大小写
ALTER TABLE temp_01 MODIFY COLUMN browser VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
Query OK, 180 rows affected (0.01 sec)
Records: 180  Duplicates: 0  Warnings: 0

4. 总结

  • 默认情况下MySQL 的 WHERE 条件是大小写不敏感的,除非使用了二进制比较或指定了大小写敏感的排序规则。
  • 如果想要进行大小写敏感的比较,可以使用 BINARY 关键字或者指定适当的排序规则。