mysql中怎么设置大小写不敏感

数据库   发布日期:2025年02月07日   浏览次数:356

这篇文章主要介绍了mysql中怎么设置大小写不敏感的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql中怎么设置大小写不敏感文章都会有所收获,下面我们一起来看看吧。

    mysql设置大小写不敏感

    原理与参数

    mysql大小写敏感配置与两个参数相关 —— lower_case_file_system 和 lower_case_table_names

    查看当前mysql的大小写敏感配置

    1. show global variables like '%case%';
    2. +------------------------+-------+
    3. | Variable_name | Value |
    4. +------------------------+-------+
    5. | lower_case_file_system | ON |
    6. | lower_case_table_names | 0 |
    7. +------------------------+-------+
    8. lower_case_file_system:表示当前系统文件是否大小写敏感(ON为不敏感,OFF为敏感),只读参数,无法修改。
    9. lower_case_table_names:表示表名是否大小写敏感,可以修改。
    10. lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
    11. lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。

    修改前准备

    由于lower_case_table_names = 1时,mysql会先把表名转为小写,如果建表时表名是大写的,设置完大小写不敏感后就会查不到。

    感觉类似Oracle建表写create table "test" 之后用select * from test就查不到,因为Oracle自动把test转成了大写。

    所以我们需要先把库里所有表名改为小写。mysql中没有自带方法,可以写个存储过程修改。

    1. DELIMITER //
    2. DROP PROCEDURE IF EXISTS lowercase //
    3. CREATE PROCEDURE lowercase(IN dbname VARCHAR(200))
    4. BEGIN
    5. DECLARE done INT DEFAULT 0;
    6. DECLARE oldname VARCHAR(200);
    7. DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = dbname;
    8. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    9. OPEN cur;
    10. REPEAT
    11. FETCH cur INTO oldname;
    12. SET @newname = LOWER(oldname);
    13. #IF newname equals to oldname, do nothing;
    14. #select 'a' <> 'A'; -> 0
    15. #select 'a' <> BINARY 'A'; -> 1
    16. SET @isNotSame = @newname <> BINARY oldname;
    17. IF NOT done && @isNotSame THEN
    18. SET @SQL = CONCAT('rename table ',oldname,' to ',@newname);
    19. PREPARE tmpstmt FROM @SQL;
    20. EXECUTE tmpstmt;
    21. DEALLOCATE PREPARE tmpstmt;
    22. END IF;
    23. UNTIL done END REPEAT;
    24. CLOSE cur;
    25. END //
    26. DELIMITER ;
    27. #调用存储过程
    28. #call lowercase('TEST');
    29. #TEST为你想要修改的数据库的名称

    正式设置

    vi my.cnf文件,设置 lower_case_table_names = 1 ,重启mysql后生效

    1. vi my.cnf
    2. #添加
    3. lower_case_table_names = 1

    mysql大小写不敏感,设置不生效的解决

    最近mysql测试环境碰到环境碰到了一个问题。希望mysql大小写不敏感,但是设置大小写敏感不生效?

    首先介绍一下我的mysql版本,mysql使用docker安装。mysql版本为:5.7.22。

    解决思路

    1:查询msyql的大小写敏感参数

    1. show global variables like '%lower_case%';

    若lower_case_table_names = 0,则大小写敏感,需要设置参数。

    2:更改mysql配置文件参数

    因mysql容器启动命令有做了配置文件映射,直接修改配置文件参数即可。

    mysql容器启动命令

    1. 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 如下:

    1. [mysqld]
    2. user=mysql
    3. character-set-server=utf8
    4. default_authentication_plugin=mysql_native_password
    5. secure_file_priv=/var/lib/mysql
    6. expire_logs_days=7
    7. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    8. max_connections=1000
    9. lower_case_table_names=1
    10. [client]
    11. default-character-set=utf8
    12. [mysql]
    13. default-character-set=utf8

    3:再次查询msyql的大小写敏感参数

    1. show global variables like '%lower_case%';
    2. #还是显示lower_case_table_names = 0

    4:查询mysql日志

    通过查询mysql日志,发现以下信息

    1. Warning: World-writable config file ‘/etc/mysql/my.cnf' is ignored
    2. #mysql的配置文件被忽略了,why?

    注意两个单词World-writable,意味着mysql的配置文件任何人都可写,mysql认为这不安全,于是忽略了这个配置文件。

    5:更改mysql的配置文件

    1. chmod 644 /softdata/mysql/config
    2. #my.cnf设置为当前用户可读写,其他用户不可写,只读.

    6:重启mysql,再次查询msyql的大小写敏感参数

    1. docker restart mysql
    2. show global variables like '%lower_case%';#lower_case_table_names =1
    3. #mysql 设置大小写不敏感成功

    以上就是mysql中怎么设置大小写不敏感的详细内容,更多关于mysql中怎么设置大小写不敏感的资料请关注九品源码其它相关文章!