首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL查询区分大小写

MySQL查询区分大小写

原创
作者头像
晓松
发布2024-12-23 10:25:07
发布2024-12-23 10:25:07
9460
举报

Mysql 查询不区分大小写的解决方法

某网站 MySQL 的 BUG

代码语言:bash
复制
-- 使用用户大写查询
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)
解决方案
  1. 查询语句上加binary
代码语言:bash
复制
mysql> select username from db_user where binary username = 'ADMIN';
Empty set (0.00 sec)
  1. 建表时加binary

示例 create tables user (username varchar(150) binary not null);

  1. 已建表修改表结构
  2. 修改
代码语言:bash
复制
mysql> alter table user MODIFY username varchar(150) binary NOT NULL;
  • 再次验证
代码语言:bash
复制
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:表示表名和数据库名在表创建时区分大小写,但在查询时不区分
代码语言:bash
复制
[mysqld]
lower_case_table_names=0
  • 注意事项

重启 MySQL 服务:修改配置文件后,必须重启 MySQL 服务才能使更改生效。 现有数据库的影响:改变 lower_case_table_names 设置可能会影响现有数据库和表的访问,确保在修改之前备份数据。 应用程序兼容性:确保应用程序能够处理大小写敏感的查询,以避免出现意外错误。

Windows 和 Linux 的区别

  • Windows

默认情况下,Windows 的 MySQL 安装会将 lower_case_table_names 设置为 1,这意味着表名不区分大小写。 如果需要区分大小写,需要手动将其设置为 0,并注意在创建表时使用正确的大小写。

  • Linux

默认情况下,Linux 的 MySQL 安装会将 lower_case_table_names 设置为 0,这意味着表名区分大小写。

如果需要不区分大小写,可以将其设置为 1,但要注意这可能会影响现有的数据库和表。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mysql 查询不区分大小写的解决方法
    • 解决方案
    • 修改配置文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档