当前位置: 代码网 > it编程>数据库>Mysql > Linux环境下设置MySQL表名忽略大小写的方法小结

Linux环境下设置MySQL表名忽略大小写的方法小结

2024年07月04日 Mysql 我要评论
说明本文档适用于docker容器运行的mysql,修改mysql表名忽略大小写。一、摘要在mysql中,表名的大小写敏感性取决于操作系统和mysql的配置。在unix/linux系统上,表名通常是区分

说明

本文档适用于docker容器运行的mysql,修改mysql表名忽略大小写。

一、摘要

在mysql中,表名的大小写敏感性取决于操作系统和mysql的配置。在unix/linux系统上,表名通常是区分大小写的,而在windows系统上则通常是不区分大小写的。由于之前mysql未设置忽略表名大小写导致数据查询失败等问题。

二、查看服务器上mysql情况

方式一:通过linux方式

查看mysql是否忽略了表名大小写,先登录mysql(mysql -uroot -p),再通过命令查看目前mysql忽略表名的情况(show variables like "lower_case_table_names";)

方式二:借助可视化工具(navicat)

连上服务器上对应的mysql服务,新建查询,如下图所示:

三、mysql设置忽略表名大小写的参数(lower_case_table_names)

lower_case_table_names 可以设置为以下三个值之一:

0:区分大小写。数据库和表名在存储和比较时都区分大小写。在 unix 和 linux 系统上,这是默认值。

1:不区分大小写。数据库和表名在存储和比较时都不区分大小写。在 windows 系统上,这是默认值。但请注意,即使设置为 1,在某些情况下(如使用 innodb 存储引擎和 create table 语句中的引号),mysql 仍然可能区分大小写。

2:表名在存储时区分大小写,但在比较时不区分。这个设置很少使用,因为它可能导致混淆和不一致的行为。

注意:在安装mysql过程中,只有在初始化的mysql情况下,更改lower_case_table_names的值。

四、网上解决方案

方法一:只修改my.cnf

1.添加lower_case_table_names=1

在服务器上找到my.conf文件,由于我是采取docker compose部署的mysql,因此修改mysql的配置文件后启动方式因自己安装的方式而异。

#忽略表名大小写
lower_case_table_names=1

在 [mysqld] 部分新增

2.保存并退出

3.重启mysql

问题:

问题描述:different lower_case_table_names settings for server ('1') and data dictionary ('0').

出现问题是在重启mysql容器的时候报错。

方法二:临时设置

注:重启mysql会失效

1.登录mysql

2.设置lower_case_table_names

set golbal lower_case_table_names = 1;

3.刷新权限

flush privileges;

问题:

1238 - variable 'lower_case_table_names' is a read only variable

lower_case_table_names 是一个只读的系统变量,这意味着你不能在 mysql 服务器运行时动态地更改它的值。这个变量必须在 mysql 服务器启动时从配置文件(通常是 my.cnfmy.ini,取决于你的操作系统和安装方式)中读取,或者在首次初始化数据目录时设置。因此这个方案行不通。

五、解决方案(docker方式)

1.先备份mysql数据库数据

(1)通过命令去备份

mysqldump -uroot -p[密码] [数据库] > [备份的sql]

(2)采用工具备份,如navicat

2.停止mysql

3.找到mysql数据存放路径

4.备份数据目录

cp -ar datadir datadir_old

5.清空之前的数据目录

rm -rf datadir/*

6.配置docker compose的mysql

注:如果之前存在先删除之前旧的运行mysql容器。

在docker-compose.yml中配置mysql。

mysql:
    restart: always
    image: mysql:8.0.35
    volumes:
      - ./mysql/datadir:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/my.cnf
    environment:
      - "mysql_root_password=xxx"
      - "mysql_database=xxx"
      - "mysql_user=xxx"
      - "mysql_password=xxx"
      - "tz=asia/shanghai"
    command: --lower_case_table_names=1  # 添加这一行来设置lower_case_table_names  
    ports:
      - "3306:3306"

配置如下:

7.重新用docker compose命令运行一个mysql容器

docker compose up -d mysql

8.查看启动日志

docker logs 容器名/容器id

若没出现错误即为,设置mysql忽略表名大小写成功。

9.将数据恢复

(1)将导出的数据原封导入到mysql中

(2)将备份的数据目录全部复制到现在mysql目录

10.验证

到此,mysql更新lower_case_table_names=1,忽略表名大小写完成。

以上就是linux环境下设置mysql表名忽略大小写的方法小结的详细内容,更多关于 linux mysql表名忽略大小写的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com