为什么有时候mysql不区分大小写

哎呀,当MySQL不区分大小写时,我们就得从字符集和排序规则开始了。
如果你想一下,字符集就像我们用来写文章的字母表,而排序规则就是这些字母如何排列和比较。
例如,我有一个存储用户名的数据库表。
该表使用的字符集是utf8 mb4 ,排序规则是utf8 mb4 _general_ci。
这意味着无论大小写字母,名称都算作 1
当我运行该项目时,所有用户名都存储在一个表中,并且大小写混合。
然后我发现在统计用户数的时候,所有的名字都被统计了,不分大小写。
一开始我不明白怎么会有这么多用户。
查了资料后发现确实是这样。

这主要是因为MySQL的默认排序规则不区分大小写。
前面说过,utf8 mb4 _general_ci排序规则不管你写的是大写还是小写,只要字母相同,它就认为它们是相同的。

如何控制大小写?有两种方法。
第一种是在创建表或列时直接指定分组。
例如,您可以编写:
sql 创建表 user_info ( 名称 VARCHAR(2 5 5 ) 字符集 utf8 mb4 整理 utf8 mb4 _bin );
这样,MySQL 在比较字符串时就会区分大小写。

第二种方法是在查询时使用 BINARY 关键字。
例如,如果你想查找一个名为“John”的用户,你可以这样写:
sql 从 user_info 中选择,其中二进制名称 = 'John';
这样,MySQL就会以二进制方式进行比较,区分大小写。

所以,MySQL不区分大小写,主要是因为字符集和排序规则的设置。
您只需进行一些调整即可控制其区分大小写。

linux中mysql表名区分大小写吗

2 02 3 年,朋友在Linux系统中使用MySQL,发现表名区分大小写有问题。
在 Linux 上,MySQL 默认区分大小写。
数据库名称、表名称、变量名称和表别名严格区分大小写,而列名称和列别名区分大小写。
例如,SELECTFROMUsers 和 SELECTFROMusers 是两个不同的表,但 SELECTusernameFROMusers 和 SELECTUSERNMFROMusers 是等效的。

如果要自定义区分大小写规则,可以更改MySQL配置文件中的lower_case_table_names参数。
但请注意,在Linux系统上更改此参数可能会导致服务无法启动,因为此参数仅在数据库初始化时生效。
如果数据库已经存在,更改后重新启动服务可能会导致错误。

参数值分为三种类型: 0:区分大小写(Linux 标准) 1 :不区分大小写(Windows 标准) 2 :表在创建时按指定大小写存储,但查询时不区分大小写(仅适用于Unix系统,但MySQL官方不推荐)。

跨平台兼容性的建议是在设计阶段一致使用小写和下划线的命名约定(例如user_info),以避免操作系统差异带来的问题。
如果需要从Windows迁移到Linux,最好将lower_case_table_names设置为0并在Windows环境下重建数据库,或者调整Linux端的代码以适应区分大小写的规则。

总之,Linux上的MySQL表名默认区分大小写,强制更改配置参数可能会导致错误。
最好的做法是在迁移时标准化命名约定或提前规划兼容性解决方案。
算了,你自己想办法吧。

MySQL是否区分大小写?

等等,还有一件事。
上次在Linux服务器上做数据库迁移的时候,差点就因为这个遇到了麻烦。
当时我把Windows下的小表名直接复制到Linux下,但是查询的时候结果并不总是一致。
我花了很长时间才弄清楚这是一个区分大小写的问题。
具体来说,事情发生在2 02 3 年3 月,在使用CentOS 7 的系统上,当时使用的MySQL版本是8 .0。
这个问题让我意识到,当我们跨平台操作时,真的不能想当然。
我们需要单独检查大小写敏感性并重新确认。