某网站 MySQL 的 BUG
-- 使用用户大写查询
mysql> select username from user where username = 'ADMIN';
+----------+
| username |
+----------+
| admin |
+----------+
1 row in set (0.00 sec)
-- 按照正常大小写查询
mysql> select username from user where username = 'admin';
+----------+
| username |
+----------+
| admin |
+----------+
1 row in set (0.00 sec)
mysql> select username from db_user where binary username = 'ADMIN';
Empty set (0.00 sec)
示例 create tables user (username varchar(150) binary not null);
mysql> alter table user MODIFY username varchar(150) binary NOT NULL;
mysql> select username from db_user where username = 'ADMIN';
Empty set (0.00 sec)
lower_case_table_names=0
:表示表名和数据库名区分大小写lower_case_table_names=1
:表示表名和数据库名不区分大小写(默认在 Windows 上)lower_case_table_names=2
:表示表名和数据库名在表创建时区分大小写,但在查询时不区分[mysqld]
lower_case_table_names=0
重启 MySQL 服务:修改配置文件后,必须重启 MySQL 服务才能使更改生效。 现有数据库的影响:改变 lower_case_table_names 设置可能会影响现有数据库和表的访问,确保在修改之前备份数据。 应用程序兼容性:确保应用程序能够处理大小写敏感的查询,以避免出现意外错误。
Windows 和 Linux 的区别
默认情况下,Windows 的 MySQL 安装会将
lower_case_table_names
设置为1
,这意味着表名不区分大小写。 如果需要区分大小写,需要手动将其设置为0
,并注意在创建表时使用正确的大小写。
默认情况下,Linux 的 MySQL 安装会将
lower_case_table_names
设置为0
,这意味着表名区分大小写。如果需要不区分大小写,可以将其设置为 1,但要注意这可能会影响现有的数据库和表。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。