翼度科技»论坛 编程开发 mysql 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
说明

本文档适用于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)
  1. lower_case_table_names
复制代码
可以设置为以下三个值之一:
0:区分大小写。数据库和表名在存储和比较时都区分大小写。在 Unix 和 Linux 系统上,这是默认值。
1:不区分大小写。数据库和表名在存储和比较时都不区分大小写。在 Windows 系统上,这是默认值。但请注意,即使设置为 1,在某些情况下(如使用
  1. InnoDB
复制代码
存储引擎和
  1. CREATE TABLE
复制代码
语句中的引号),MySQL 仍然可能区分大小写。
2:表名在存储时区分大小写,但在比较时不区分。这个设置很少使用,因为它可能导致混淆和不一致的行为。
注意:在安装MySQL过程中,只有在初始化的MySQL情况下,更改lower_case_table_names的值。

四、网上解决方案


方法一:只修改my.cnf


1.添加lower_case_table_names=1

在服务器上找到my.conf文件,由于我是采取docker compose部署的MySQL,因此修改MySQL的配置文件后启动方式因自己安装的方式而异。
  1. #忽略表名大小写
  2. 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
  1. SET GOLBAL lower_case_table_names = 1;
复制代码
3.刷新权限
  1. FLUSH PRIVILEGES;
复制代码
问题:

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

五、解决方案(docker方式)


1.先备份MySQL数据库数据

(1)通过命令去备份
  1. [code]mysqldump -uroot -p[密码] [数据库] > [备份的sql]
复制代码
[/code](2)采用工具备份,如Navicat

2.停止MySQL


3.找到MySQL数据存放路径


4.备份数据目录
  1. cp -ar datadir datadir_old
复制代码
5.清空之前的数据目录
  1. rm -rf datadir/*
复制代码
6.配置docker compose的MySQL

注:如果之前存在先删除之前旧的运行MySQL容器。
在docker-compose.yml中配置MySQL。
  1. mysql:
  2.     restart: always
  3.     image: mysql:8.0.35
  4.     volumes:
  5.       - ./mysql/datadir:/var/lib/mysql
  6.       - ./mysql/conf/my.cnf:/etc/my.cnf
  7.     environment:
  8.       - "MYSQL_ROOT_PASSWORD=xxx"
  9.       - "MYSQL_DATABASE=xxx"
  10.       - "MYSQL_USER=xxx"
  11.       - "MYSQL_PASSWORD=xxx"
  12.       - "TZ=Asia/Shanghai"
  13.     command: --lower_case_table_names=1  # 添加这一行来设置lower_case_table_names  
  14.     ports:
  15.       - "3306:3306"
复制代码
配置如下:


7.重新用docker compose命令运行一个MySQL容器
  1. docker compose up -d mysql
复制代码
8.查看启动日志
  1. docker logs 容器名/容器id
复制代码
若没出现错误即为,设置MySQL忽略表名大小写成功。

9.将数据恢复

(1)将导出的数据原封导入到MySQL中
(2)将备份的数据目录全部复制到现在MySQL目录

10.验证


到此,MySQL更新lower_case_table_names=1,忽略表名大小写完成。
以上就是Linux环境下设置MySQL表名忽略大小写的方法小结的详细内容,更多关于 Linux MySQL表名忽略大小写的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/database/322801xkd.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具