MySQL大小写敏感的另类解决方案

项目测试环境的数据库出现大小写敏感的问题,但之前图省事,使用docker方式运行,配置文件没有外置,现在怎么办?

参数

mysql是通过lower_case_table_names参数来控制大小写敏感的,该参数在[mysqld]结点下。

  1. 关于lower_case_table_names参数对表名称或数据库名称大小写敏感的控制。
  2. Unix下默认为0,也就是大小写敏感的;Windows下默认为1,不敏感;macOS默认为2,存储区分大小写,但是在查询时会转换为小写。
  3. 对于在大小写不敏感的系统(Windows和macOS)不能将该字段设置为0

排查

先确定一下数据库

show variables like 'lower%' 

显示  lower_case_table_names   0

备注

其中 0:区分大小写,1:不区分大小写 

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

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

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

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

4、 变量名也是严格区分大小写的;

修改

 

那就尝试直接在docker里修改配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

提示未安装vim

换最基础的vi

vi /etc/mysql/mysql.conf.d/mysqld.cnf

还是提示未安装vi

那就自己安装vim

yum install vim

yum 也没有

。。。。。这个mysql的centos容器应该是一个最小化的环境


 

mysql的配置没法修改了,难道要把表导出再新配置一个mysql,想想其他的办法,

复制一个vim 安装包进去,或者更直接把mysqld.cnf复制出来修改再覆盖回去试试


备注

从容器里面拷文件到宿主机

docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /home

从宿主机拷文件到容器里面

docker cp /home/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/

 

验证

修改完重启数据库再次验证

show variables like 'lower%'

显示  lower_case_table_names   1

删除之前异常的表,问题解决

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐