mysql linux 大小写敏感_mysql在Linux下大小写敏感设置

默认情况下,mysql在windows下是不区分大小写的,但是mysql在linux下大小写规则是这样的:

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

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

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

4、表中字符格式的数据是忽略大小写的,这一点不合理!

针对上面几点,比如按默认配置创建一个数据库test和表dept,表中一条数据(数据库mysql5.7):

66e599a50c2f36dadf7c6e7e57f51e56.png

那么当我们进行下面操作时,将会报错:

--报错1049,库名是test

USETest;--报错1146,表名是dept

SELECT * FROMDept;--报错1054,表别名是d

SELECT * FROM dept d WHERE D.`Id`=1;--不报错,但是数据没有区分大小写(like也不区分)

SELECT * FROM dept WHERE NAME='SALE';

这些大小写敏感问题可能让我们这些开发者有点不适应,解决方案如下:

针对上面的1和2两点,我们可以在配置文件中的mysqld节点添加一行配置:

lower_case_table_names = 1

参数解释:0:区分大小写  1:不区分大小写

顺带提一下,这里说下这个配置文件,先进入mysql的主目录,在目录下会有个my.cnf文件,打开查看里面有没有mysqld节点配置,我这里是没有的,里面是:

!includedir /etc/mysql/conf.d/!includedir/etc/mysql/mysql.conf.d/

想必这两个指的是mysql配置文件的目录,然后分别进入这两个目录,发现/etc/mysql/mysql.conf.d/目录下的mysqld.cnf文件里有mysqld节点配置,然后将上面配置加上(存在则修改)即可:

7b1c760ec1b0c1805d5a9093aea8e783.png

如果都没有找到mysqld节点,那直接在my.cnf中加上mysqld节点,再将上面的配置加上(存在则修改)即可

修改完成需要重启下mysql服务:service mysql restart

mysql8只能在数据库初始化时才有效,数据库创建好之后就不能修改大小写敏感设置了,这一点着实有点坑人

第3点是正常的,我们也是希望列名与列的别名不区分大小写,但是第4点太不正常了,解决方案如下:

如果我们还没有建表,那么可以在建表时指定列设置BINARY属性,即区分大小写,如上面创建dept表:

CREATE TABLE`test`.`dept`(

`Id`INT(11) NOT NULLAUTO_INCREMENT,

`Name`VARCHAR(100) BINARY NOT NULL,

`Desc` VARCHAR(1000) BINARY,PRIMARY KEY(`Id`)

);

如果我们表已经创建好了,可以使用Alter命令修改BINARY属性:

ALTER TABLE dept MODIFY COLUMN `Name` VARCHAR(100) BINARY NOT NULL;

还有,如果我们不想修改BINARY属性,我们可以在查询的时候,在查询条件前加BINARY属性:

SELECT * FROM dept WHERE BINARY NAME='SALE';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值