mysql如何修改为大小写不敏感?

我们有时会面临需要对mysql数据库设置为大小写不敏感,比较常见的例如:在Linux下,MySQL的表名区分大小写,而在Windows下是不区分,有时候在Linux上查询大写表名时就会出现找不到表的情况,比较常用的做法就是将Linux的Mysql设置为大小写不敏感。以下是操作步骤。

1.处理包含大写字母的旧库

对于旧表,如果直接执行以下操作步骤2,是不能生效的。所以我们需要首先对旧表进行处理。处理方式是将包含大写字母的库名的数据库,统一修改为只有小写字母。而数据库是不能直接重命名的,处理方式有两种,一种是导出sql脚本后,创建新库后再到新库执行脚本完成导入;这里主要介绍第二种rename的方式:
rename table old_db.tb to new_db.tb;

这里写了一个脚本,批量执行,提供选择。
使用时,请自行替换数据库账号、密码、主机信息,以及对应需要迁移的数据库,见注释1和注释2

#!/bin/bash

#注释1:填写数据库信息
user=test
pass=test123
host=localhost

#注释2:选择需要处理的DB
for old_db in db1 db2 db3
do
		echo $old_db begin
new_db=$(echo $old_db | tr '[A-Z]' '[a-z]')

mysql -u$user -p$pass -h$host -e "create database if not exists $new_db;"

old_tables=$(mysql -u$user -p$pass -h$host -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='$old_db'")

for old_table in $old_tables
		do
    new_table=$(echo $old_table | tr '[A-Z]' '[a-z]')
    #echo $old_table 'to' $new_table
    mysql -u$user -p$pass -h$host -e "rename table $old_db.$old_table to $new_db.$new_table"    
		done
		echo $old_db end
done

操作完可以自行选择删除旧库。

2.设置大小写不敏感
mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.00 sec)

设置大小写不敏感的处理方式就是修改大小写敏感的变量lower_case_table_names,将它设置为忽略大小写,即:lower_case_table_names=1即可。我们可以找到相应操作系统环境下的my.cnf文件进行修改,修改后重启生效。

至此所有操作完毕,可以继续愉快的使用了。

参考:

设置MySQL数据库不区分大小写:https://cloud.tencent.com/developer/article/1455866
如何修改MySQL数据库名称:https://zhuanlan.zhihu.com/p/264878599

你可能感兴趣的:(工具,mysql,数据库,linux)