Mysql查询是否区分大小写

本文详细介绍了MySQL在不同操作系统下对大小写的处理方式,包括如何在Windows和Linux系统中配置MySQL以实现对数据库名、表名和列名的大小写敏感性调整。探讨了通过修改配置文件、使用BINARY关键字和调整collation属性来实现这一目标的方法。

注:的表名区分大小写,列名不区分的大小写

 

一、

1、 CREATE TABLE NAME(name VARCHAR(10));

对这个表,缺省情况下,下面两个查询的结果是一样的:

SELECT * FROM TABLE NAME WHERE name='clip';

SELECT * FROM TABLE NAME WHERE name='Clip';

MySql默认查询是不区分大小写的,如果需要区分他,必须在建表的时候,Binary标示敏感的属性.

CREATE TABLE NAME(
name VARCHAR(10) BINARY
);

2、 在SQL语句中实现 SELECT * FROM TABLE NAME WHERE BINARY name='Clip';

3、 设置字符集:

utf8_general_ci --不区分大小写

utf8_bin--区分大小写

二、 MySQL在windows下是不区分大小写的,将script文件导入MySQL后表名也会自动转化为小写,结果再 想要将数据库导出放到linux服务器中使用时就出错了。
因为在linux下表名区分大小写而找不到表,查了很多都是说在linux下更改MySQL的设置使其也不区分大小写,但是有没有办法反过来让windows 下大小写敏感呢。
其实方法是一样的,相应的更改windows中MySQL的设置就行了。

具体操作:

在MySQL的配置文件my.ini中增加一行:

lower_case_table_names = 0

其中 0:区分大小写,1:不区分大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

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

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

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的; MySQL在Windows下都不区分大小写

http://www.jb51.net/article/61591.htm

当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感。
解决方案一:
于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。
通过查询资料发现需要设置collate(校对) 。 collate规则:
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写
总结:Mysql默认的字符检索策略:utf8_general_ci,表示不区分大小写;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。(注意:在Mysql5.6.10版本中,不支持utf8_genral_cs)

       
创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin。
-- 创建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
-- 修改表结构的Collation属性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

直接修改sql语句,在要查询的字段前面加上binary关键字即可。

-- 在每一个条件前加上binary关键字
select * from user where binary username = 'admin' and binary password = 'admin';
-- 将参数以binary('')包围
select * from user where username like binary('admin') and password like binary('admin');

 

解决方法一:
1.可以将查询条件用binary()括起来。 比如: 
select * from TableA where binary columnA ='aaa';
2. 可以修改该字段的collation 为 binary
比如:
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

解决方案二:
mysql查询默认是不区分大小写的 如:
select * from some_table where str=‘abc';
select * from some_table where str='ABC';
得到的结果是一样的,如果我们需要进行区分的话可以按照如下方法来做: 
第一种方法:
要让mysql查询区分大小写,可以:
select * from some_table where binary str='abc'
select * from some_table where binary str='ABC'
第二种方法:
在建表时时候加以标识
create table some_table(
str char(20) binary 
)
原理:
对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的 校对规则。
BINARY属性是指定列字符集的二元 校对规则的简写。
排序和比较基于数值字符值。因此也就自然区分了大小写。

<think>嗯,用户现在想查询MySQL大小写敏感性设置,尤其是如何检查MySQL是否区分大小写。之前我们讨论过如何给单个表设置区分大小写,但当时提到MySQL本身不支持单表设置,而是依赖系统级的配置。现在用户的问题更基础一些,主要是如何检查当前的设置。首先,我需要回忆一下MySQL大小写规则。根据之前的引用,数据库名和表名在Windows和Linux上的默认行为不同。Windows不区分,而Linux区分。但用户现在想知道具体的检查方法,可能需要查看系统变量lower_case_table_names的值,这个变量是关键。 用户可能需要具体的步骤,比如如何通过SQL查询或者查看配置文件。比如运行SHOWVARIABLES LIKE'lower_case_table_names';这个命令可以显示当前设置的值。然后根据值的不同解释结果:0表示区分大小写,1表示不区分,2是混合模式。但要注意,这个变量在服务器运行期间不能更改,只能在启动时配置,所以用户可能需要检查配置文件my.cnf或my.ini中的设置。 另外,用户可能还想知道如何检查数据目录中的实际表名,比如在Linux下直接查看数据目录下的文件名是否保留大小写,而在Windows下是否都是小写。这也是一个实际的方法,但需要访问服务器文件系统,可能对普通用户来说有点难度。 还需要注意,不同版本MySQL的默认设置可能不同,尤其是在不同操作系统上。例如,在Linux上默认lower_case_table_names=0,而Windows是1。所以用户需要确认自己的操作系统和MySQL版本。 可能用户会混淆表名的大小写敏感和字段内容的大小写敏感,比如COLLATION和CHARACTER SET对字段值比较的影响。这时候需要提醒用户,检查表名和数据库名的大小写敏感性与字段内容的比较是不同的问题,后者由列的校对规则控制。 最后,生成相关问题的时候,要考虑用户可能的后续疑问,比如如何修改设置、迁移数据库时的注意事项,或者处理现有数据的大小写问题。这些问题可以帮助用户进一步解决问题,避免后续的困惑。</think>### 如何检查 MySQL 是否区分大小写 --- #### **1. 查看系统变量 `lower_case_table_names`** 此变量控制表名和数据库名的大小写敏感性,通过以下 SQL 查询: ```sql SHOW VARIABLES LIKE 'lower_case_table_names'; ``` 结果解读: - **`0`**: 区分大小写(Linux 默认值)[^1][^2] - **`1`**: 不区分大小写(Windows 默认值,表名存储为小写) - **`2`**: 混合模式(表名按创建时大小写存储,但比较时转换为小写) --- #### **2. 检查操作系统特征** - **Linux/Unix**:默认区分大小写,查看数据目录 `/var/lib/mysql/` 中的表名是否保留大小写[^1] - **Windows**:默认不区分大小写,数据目录中的表名均为小写 --- #### **3. 验证字段值大小写敏感性** 字段内容的大小写敏感性由列的 `COLLATION` 控制: ```sql SHOW FULL COLUMNS FROM 表名; ``` - **`utf8mb4_bin`**: 区分大小写(如 `'A' != 'a'`) - **`utf8mb4_ci`**: 不区分大小写(如 `'A' = 'a'`) --- #### **4. 配置文件检查** 查看 MySQL 配置文件 `my.cnf`(Linux)或 `my.ini`(Windows)中的设置: ```ini [mysqld] lower_case_table_names=0 # 0=区分,1=不区分 ``` --- ### **示例验证** ```sql -- 创建测试表 CREATE TABLE TestCase (id INT); CREATE TABLE testcase (name VARCHAR(20)); -- 若报错 "Table 'testcase' already exists",则说明不区分大小写(lower_case_table_names=1) ``` --- ### **注意事项** - 修改 `lower_case_table_names` 需**重启 MySQL 服务**并**重建数据库**才能生效[^2] - Windows 与 Linux 迁移时需保持配置文件一致性,避免表名访问异常[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值