Mysql大小写敏感问题

Mysql大小写敏感问题

文章目录

    • Mysql大小写敏感问题
  • 前言
  • 数据库名与表名大小写敏感?
    • windows
    • linux
  • 列名大小写敏感?
  • 字段内容大小写敏感?
    • windows
      • 方法一
      • 方法二
      • 方法三(推荐)
      • 方法四
    • linux
  • 总结

前言

Mysql有如下三个大小写敏感相关问题。

  1. 数据库名与表名
  2. 列名和列的别外
  3. 字段内容

数据库名与表名大小写敏感?

windows

默认情况,数据库名与表名是不区分大小写。

若想修改为大小写敏感,如下配置:

  1. 打开C:\ProgramData\MySQL\MySQL Server 5.7目录,找到my.ini文件并打开。
  2. 在结尾处添加如下代码
#区分大小写
lower_case_table_names=2

有人说如下设置lower_case_table_names=0 这样会报错。
可参数MySQL配置文件-my.ini理解my.ini文件

  1. 重启mysql服务
net stop MySQL57;
net start MySQL57;
  1. 验证,执行sql语句
show global variables like '%lower_case%';

ps
把lower_case_table_names从0改变为1
在你把lower_case_table_names设置为1时,在restart你的mysqld之前,请把数据库名和表名更改为小写

linux

默认情况,数据库名与表名是严格区分大小写。
若想修改为大小写敏感,如下配置:

  1. 打开 /etc/my.cnf,添加如下lower_case_table_names = 1 //大小写不敏感
  2. 设置好后重启服务:systemctl restart mysqld
  3. 验证
show variables like "%case%";

列名大小写敏感?

windows和linux默认情况,列名与列的别名在所有的情况下均是忽略大小写的;

字段内容大小写敏感?

这个很重要,不然会闹出笑话的。

windows

默认情况,字段内容大小写不敏感。

若想修改为大小写敏感,如下配置:

方法一

在创建表时指定字段的校验规则,使用BINARY ,比如create table aa (a varchar(20) BINARY , c varchar(20)) ;

或者(推荐)

DROP TABLE IF EXISTS `aa`;
CREATE TABLE `aa` (
  `a` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `c` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

方法二

表已经创建,执行修改sql语句
alter table test3 modify name varchar(20) collate utf8_bin;,其实本质上也是把collatioin(校对)模式改成二进制校对,实现大小写敏感。

方法三(推荐)

使用Navicat for MySQL工具,打开设计表,选中字段,在下面的排序规则里选中utf8-bin
Mysql大小写敏感问题_第1张图片

方法四

不修改mysql,修改查询语句
指定Collation:select * from case1 where B like ‘%b%’ collate utf8_bin;
通过binary把字符串转化为二进制比较:select * from case1 where binary B like ‘%b%’;

原理
字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则 .
一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束 。比如 utf8字符集,utf8_general_ci,表示不区分大小写,这个是utf8字符集默认的校对规则;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。

总结:只要在创建表的时候指定collate为utf8_bin,就可以实现大小写敏感,如果建表时未指定,则可修改字段的校对规则,也可以实现大小写敏感。

linux

默认情况,字段内容大小写不敏感。
若想修改为大小写敏感,设置方法如上windows

总结

windows

1、数据库名与表名是忽略大小写;
2、表的别名是忽略大小写;
3、列名与列的别名是忽略大小写;
4、字段内容默认情况下是严格区分大小写。

linux

1、数据库名与表名是严格区分大小写;
2、表的别名是严格区分大小写;
3、列名与列的别名是忽略大小写;
4、字段内容是忽略大小写。

你可能感兴趣的:(技术工具,mysql)