TypechoJoeTheme

Weclome to TTP

统计

MySQL修改区分大小写

TTP博主
2022-07-11
/
0 评论
/
185 阅读
/
533 个字
/
百度已收录
07/11
本文最后更新于2022年07月19日,已超过139天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

MySQL修改区分大小写


MySQL默认在Windows下是不区分大小写、在Linux下是区分大小写的。

  • 识别是否区分大小写的MySQL变量为lower_case_table_names
    • lower_case_table_names的值为1,表示数据库名、表名不区分大小写,统一为小写
    • lower_case_table_names的值为0,表示数据库名、表名区分大小写
  • 查看MySQL当前的大小写的设置
    show variables like 'lowe%';

修改MySQL大小写设置

lower_case_table_names变量是全局系统变量,没法动态修改。

  • lower_case_table_names设置只能通过修改MySQL的配置文件来修改
  • 要注意的是,如果MySQL里已经有大写的数据库或表,在修改不区分大小写设置后,原先里的大小的库或表则将丢弃,所以如果源MySQL数据库中存在大写的数据库或表,则要对大写库和表做操作:
    • 要确认原先MySQL中是否存在大写的数据库或表,如果存在,则需要将大写的库或表转化为小写,然后再修改MySQL配置文件
--将大写表重命名为小写表
rename table Test to test;

--如果存在大写库,则需要先创建一个小写库,然后将大写库里面的表转移到小写库
create database test;
rename table Test.test1 to test.test1;

--查询实例中有大写字母的表
select
    table_schema,
    table_name
from
    information_schema.`tables`
where
    table_schema not in ('information_schema','sys','mysql','performance_schema')
    and table_type = 'BASE TABLE'
    and table_name REGEXP binary '[A-Z]';

--拼接sql,将大写库中的表,转移到小写库中
select 
    concat('rename table Test.','TABLE_NAME','to test.',TABLE_NAME,';')
from
    information_schema.TABLES
where
    table_schema = 'Test';
MySQL5.7

对于MySQL5.7版本,可以直接修改MySQL的配置文件修改lower_case_table_names设置。

echo "lower_case_table_names = 1" >> /etc/my.cnf
  • 添加配置之后,然后重启MySQL服务生效
  • 生效之后,再进到MySQL中查看lower_case_table_names的值,为1表示不区分大小写
MySQL8

MySQL8,新增了data dictionary的概念,数据初始化时,默认使用lower-case-table-names = 0的配置。

  • MySQL8数据库启动时,读取my.cnf配置文件的值;若配置的值与初始化时lower_case_table_names的值不一致,MySQL则会启动失败

  • MySQL5.7及之前版本的数据库,允许启动时加载的lower_case_table_names设置值和初始化的lower_case_table_names不一致,且以启动加载的配置值为准。

  • MySQL8只能在开始数据初始化时,指定--lower_case_table_names参数,设置MySQL不区分大小写,否则后续是没法做修改的

    mysqld --user=mysql --basedir=/data/mysql --datadir=/data/mysql/database --initialize-insecure --lower-case-table-names=1 --defaults-file=/etc/my.cnf
  • 如果MySQL8启动时,初始化的lower_case_table_names和启动加载的配置值不一致,则会在错误日志标识:

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('1').
mysql
朗读
赞(0)
版权属于:

Weclome to TTP

本文链接:

https://ttpc.asia/archives/173/(转载时请注明本文出处及文章链接)

评论 (0)
本篇文章评论功能已关闭
IP信息

标签云

最新回复

暂无回复