MySQL大小写问题
MySQL大小写问题
表名大小写
mysql对于大小写在windows上系统和Linux上系统不一样。Linux默认情况下区分大小写,而在Windows下数据库名、表名、列名、别名都不区分大小写,即使设置lower_case_table_names=0,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。原因是各种操作系统的文件系统对大小写实现上有所不同。WINDOWS的文件系统查询时不区分文件大小写。
Linux上大小写问题可以通过配置进行修改。
mysql> show variables like 'lower%';
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
2 rows in set (0.01 sec)
lower_case_file_system:数据库所在的文件系统对文件名大小写敏感度。
- ON 表示大小写不敏感
- OFF 表示敏感
lower_case_table_names:表名大小写敏感度
- 0 表示使用Create语句指定的大小写保存文件
- 1 表示大小写敏感,文件系统以小写保存
- 2 表示使用Create语句指定的大小写保存文件,但MySQL会将之转化为小写 (当Linux设置为2时,错误日志显示[Warning]
修改my.cnf后重启数据库
lower_case_table_names=1
查询时强制区分大小写 (字段数据大小写)
前提: 如果默认为大小写不敏感
不区分大小写Sql代码
SELECT * FROM table_name WHERE name LIKE 'a%';
SELECT * FROM table_name WHERE name LIKE 'A%';
其结果是一样的
区分大小写Sql代码
为了区分'A%'和'a%':
SELECT * FROM U WHERE binary name LIKE 'a%';
SELECT * FROM U WHERE binary name LIKE 'A%';
仅仅多了一个binary,就可以得到不同的结果!
当然,如果需要建表时强制区分大小写,可以这么写:
create table table_name(
name varchar (20) binary
);
设置表或行的collation
还有一种方法就是在查询时指定collation
- _bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
- _cs: case sensitive collation,区分大小写
- _ci: case insensitive collation,不区分大小写
例如:
create table case_bin_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin;
create table case_cs_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_general_cs;
SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'F%';
SELECT * FROM case_test WHERE word LIKE 'f%' COLLATE latin1_bin;
参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构