
简单来说,MySQL 是否区分大小写
取决于具体对象和你的操作系统。
下面我将为你详细分解:
这是最常见的混淆点,它主要由操作系统决定。
你可以通过修改 MySQL 的配置文件 (my.cnf 或 my.ini) 中的 lower_case_table_names 变量来强制统一大小写行为。
-
lower_case_table_names = 0:区分大小写 (Linux 默认)。
-
lower_case_table_names = 1:不区分大小写 (Windows/macOS 默认)。表名在存储时会被转为小写。这是最常用的统一配置。
-
lower_case_table_names = 2:表名按原样存储,但比较时不区分大小写(在 MySQL 8.0 中已被废弃)。
重要提示:在 MySQL 8.0 及以上版本中,lower_case_table_names 的值在初始化数据库后不能再更改,否则服务将无法启动。
列名和索引名在所有平台上都不区分大小写。
-
例如,在任何系统中,以下两条查询语句的效果完全一样:
SELECT my_column FROM my_table;
SELECT MY_COLUMN FROM my_table;
-
即使你在创建表时使用了大写,查询时也可以用小写。
字符串内容的比较是否区分大小写,取决于你为列选择的 “排序规则”(Collation)。
排序规则是字符集的一部分,它定义了字符串如何比较和排序。
你可以查看数据库、表或列的当前排序规则:
SHOW CREATE DATABASE my_database;
SHOW CREATE TABLE my_table;
如果你想在查询时临时改变大小写行为,可以使用 BINARY 关键字,它会强制进行区分大小写的二进制比较:
SELECT * FROM users WHERE name = 'alice';
SELECT * FROM users WHERE BINARY name = 'alice';
最佳实践建议:为了避免跨平台开发时出现问题,强烈建议在所有环境中统一使用:
-
小写字母来命名数据库、表和列。
-
不区分大小写的排序规则(如
utf8mb4_0900_ai_ci)作为默认。
-
如果需要对特定字段进行区分大小写的比较,使用
BINARY 关键字。