mysql中如何设置大小写不敏感
作者:Hehuyi_In 发布时间:2024-01-15 08:10:43
mysql设置大小写不敏感
原理与参数
mysql大小写敏感配置与两个参数相关 —— lower_case_file_system 和 lower_case_table_names
查看当前mysql的大小写敏感配置
show global variables like '%case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | ON |
| lower_case_table_names | 0 |
+------------------------+-------+
lower_case_file_system:表示当前系统文件是否大小写敏感(ON为不敏感,OFF为敏感),只读参数,无法修改。
lower_case_table_names:表示表名是否大小写敏感,可以修改。
lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。
修改前准备
由于lower_case_table_names = 1时,mysql会先把表名转为小写,如果建表时表名是大写的,设置完大小写不敏感后就会查不到。
感觉类似Oracle建表写create table "test" 之后用select * from test就查不到,因为Oracle自动把test转成了大写。
所以我们需要先把库里所有表名改为小写。mysql中没有自带方法,可以写个存储过程修改。
DELIMITER //
DROP PROCEDURE IF EXISTS lowercase //
CREATE PROCEDURE lowercase(IN dbname VARCHAR(200))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE oldname VARCHAR(200);
DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = dbname;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO oldname;
SET @newname = LOWER(oldname);
#IF newname equals to oldname, do nothing;
#select 'a' <> 'A'; -> 0
#select 'a' <> BINARY 'A'; -> 1
SET @isNotSame = @newname <> BINARY oldname;
IF NOT done && @isNotSame THEN
SET @SQL = CONCAT('rename table ',oldname,' to ',@newname);
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
DEALLOCATE PREPARE tmpstmt;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END //
DELIMITER ;
#调用存储过程
#call lowercase('TEST');
#TEST为你想要修改的数据库的名称
正式设置
vi my.cnf文件,设置 lower_case_table_names = 1 ,重启mysql后生效
vi my.cnf
#添加
lower_case_table_names = 1
mysql大小写不敏感,设置不生效的解决
最近mysql测试环境碰到环境碰到了一个问题。希望mysql大小写不敏感,但是设置大小写敏感不生效?
首先介绍一下我的mysql版本,mysql使用docker安装。mysql版本为:5.7.22。
解决思路
1:查询msyql的大小写敏感参数
show global variables like '%lower_case%';
若lower_case_table_names = 0,则大小写敏感,需要设置参数。
2:更改mysql配置文件参数
因mysql容器启动命令有做了配置文件映射,直接修改配置文件参数即可。
mysql容器启动命令
docker run --name mysql5.7.22_1502 -v /softdata/mysql/config:/etc/mysql/ -v /softdata/mysql/data:/var/lib/mysql -p 1502:3306 -e MYSQL_ROOT_PASSWORD=zyc1233 -d mysql:5.7.22
修改/softdata/mysql/config/my.cnf 如下:
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
lower_case_table_names=1
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3:再次查询msyql的大小写敏感参数
show global variables like '%lower_case%';
#还是显示lower_case_table_names = 0
4:查询mysql日志
通过查询mysql日志,发现以下信息
Warning: World-writable config file ‘/etc/mysql/my.cnf' is ignored
#mysql的配置文件被忽略了,why?
注意两个单词World-writable,意味着mysql的配置文件任何人都可写,mysql认为这不安全,于是忽略了这个配置文件。
5:更改mysql的配置文件
chmod 644 /softdata/mysql/config
#my.cnf设置为当前用户可读写,其他用户不可写,只读.
6:重启mysql,再次查询msyql的大小写敏感参数
docker restart mysql
show global variables like '%lower_case%';#lower_case_table_names =1
#mysql 设置大小写不敏感成功
来源:https://blog.csdn.net/Hehuyi_In/article/details/95354014


猜你喜欢
- Golang 高并发问题的解决Golang在高并发问题上,由于协程的使用,相对于其他编程语言,已经有了很大的优势,即相同的配置上,Golan
- 本文实例讲述了Python使用回溯法解决迷宫问题。分享给大家供大家参考,具体如下:问题给定一个迷宫,入口已知。问是否有路径从入口到出口,若有
- 上一篇介绍了 HTML5 中 Canvas 的路径,这篇将要介绍一下 Canvas&nbs
- 1. 解决思路首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载。解决方案:截图然后根据该图片的定位和长高
- 一、1、图形显示图素法像素法图素法---矢量图:以图形对象为基本元素组成的图形,如矩形、 圆形像素法---标量图:以像素点为基本单位形成图形
- PHP number_format() 函数实例格式化数字:<?php echo number_format("100000
- 1.获取远程包go 语言有一个获取远程包的工具就是 go get,目前 go get 支持多数开源社区 (例如:github、googlec
- 目录查找算法 -- 简介顺序查找二分查找插值查找斐波那契查找树表查找1、二叉树查找算法。2、平衡查找树之2-3查找树(2-3 Tree)3、
- 网络开发的在分页上要是遇到数(几十)万以上的数据还是用ADO那样的分页会速度很慢的。有了存储过程速度就快多了。下面是本人用50万的数据进行的
- SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提
- Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。 1、
- 前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具,代码如下:import os,sys,timefrom
- 一、 文件的操作1.1创建文件格式:f = open(‘文件', ‘w')或者f = open(‘文件', ‘r
- 用windows账号还是可以登录的。 查找问题的过程: 第一步: 启动所有与SQL有关的服务,问题依旧; 第二步: 查看windows防火墙
- 一看,C盘只有不到2M可用空间,一查原因,sqlserver安装路径下的log目录文件占了好大,5G多, 于是上网搜了下,解决了: 把与sq
- 生成静态页的方法有很多种,我比较喜欢用xmlhttp的方法生成,因为我不用考虑很多东西,我只要把动态的asp页面编写好就行了。<% s
- mysql中using的用法为:using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条
- 如果使用Python做大型海量数据批量任务时,并且backend用mongodb做数据储存时,常常面临大量读写数据库的情况。尤其是大量更新任
- 在新的公司开始上班,今天工作的主题内容是市场部门需要抓取一些论坛用户的邮箱,以便发送营销邮件。于是用了一个python脚本来执行,前面抓了几
- 循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键