MySQL的大小写问题

  MySQL在linux下数据库、表名、列名、别名的规则:

  1.数据库名与表名是严格区分大小写;

  2.表的别名是严格区分大小写的;

  3.变量名严格区分大小写;

  4.列名与列的别名忽略大小写。


  MySQL在windows下不区分大小写。


原因:

  MySQL在查询字符串时是大小写不敏感的,在编译MySQL时一般以ISO-8859字符集座位默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。


解决办法:

  1.表名区分大小写;

   在my.conf加入

  ower_case_table_names = 0

  0:区分大小写  1:不区分大小写


  2.字段值设置BINARY属性

    就可区分大小写


下边是我在项目中所遇到的问题:


 前几天在做项目时(Linux环境),无意间手一抖,创建了两个表名相同的数据库,而在写SQL查询数据库时,会出现

 select * from swxx_zxwd  和  select * from SWXX_ZXWD 

 两种不同的结果。



 


  

### MySQL 大小写敏感性配置及规则 在 MySQL 中,大小写敏感性涉及多个方面,包括数据库、字段以及字段值等。以下是对这些方面的详细说明和相关配置。 #### 1. 数据库大小写敏感性 数据库大小写敏感性主要由操作系统的文件系统特性以及 MySQL 的配置参数 `lower_case_table_names` 决定[^1]。 - 在 Windows 系统上,默认情况下,文件系统是大小写不敏感的,因此数据库也是大小写不敏感的。 - 在 Linux 或 macOS 系统上,默认情况下,文件系统是大小写敏感的,但可以通过设置 `lower_case_table_names` 参数来改变这一行为。 `lower_case_table_names` 参数有以下三种可能的值: - **0**:存储时区分大小写,比较时也区分大小写(适用于大小写敏感的文件系统)。 - **1**:存储时转换为小写,比较时不区分大小写(适用于大小写不敏感的文件系统)。 - **2**:按指定的大小写存储,但比较时转换为小写(适用于混合文件系统)[^3]。 #### 2. 字段大小写敏感性 字段MySQL 中是大小写不敏感的。这意味着无论字段是以大写还是小写形式定义,查询时都可以使用任意大小写形式访问该字段。 #### 3. 字段值的大小写敏感性 字段值的大小写敏感性取决于字符集及其排序规则(collation)。例如,对于字符串类型的字段,如果使用的排序规则是大小写敏感的,则查询时会区分大小写;否则不会区分大小写。 常见的字符集和排序规则包括: - **utf8_general_ci**:大小写不敏感(ci 示 case-insensitive)。 - **utf8_bin**:大小写敏感,并且二进制比较。 - **utf8mb4_general_ci**:大小写不敏感。 - **utf8mb4_bin**:大小写敏感。 可以通过以下方式查看或修改字段的排序规则: ```sql -- 查看字段的排序规则 SHOW FULL COLUMNS FROM your_table; -- 修改字段的排序规则 ALTER TABLE your_table MODIFY your_column VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin; ``` #### 4. 配置文件中的相关设置 MySQL大小写敏感性可以通过配置文件(如 `my.cnf` 或 `my.ini`)进行全局设置。关键参数包括: - **lower_case_table_names**:控制数据库大小写敏感性。 - **default-character-set** 和 **collation-server**:控制默认字符集和排序规则。 配置示例: ```ini [mysqld] lower_case_table_names=1 default-character-set=utf8mb4 collation-server=utf8mb4_general_ci ``` #### 5. 示例代码 以下是一个简单的示例,展示如何创建并设置字段的排序规则: ```sql CREATE TABLE example ( id INT PRIMARY KEY, name VARCHAR(50) COLLATE utf8mb4_bin -- 大小写敏感 ); -- 插入数据 INSERT INTO example (id, name) VALUES (1, 'Test'); -- 查询区分大小写 SELECT * FROM example WHERE name = 'test'; -- 返回空结果 SELECT * FROM example WHERE name = 'Test'; -- 返回一行结果 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值