Linux环境下设置MySQL表名忽略大小写的方法小结 |
说明本文档适用于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)
0:区分大小写 。数据库和表名在存储和比较时都区分大小写 。在 Unix 和 Linux 系统上,这是默认值 。 1:不区分大小写 。数据库和表名在存储和比较时都不区分大小写 。在 Windows 系统上,这是默认值 。但请注意,即使设置为 1,在某些情况下(如使用 2:表名在存储时区分大小写,但在比较时不区分 。这个设置很少使用,因为它可能导致混淆和不一致的行为 。 注意:在安装MySQL过程中,只有在初始化的MySQL情况下,更改lower_case_table_names的值 。 四、网上解决方案方法一:只修改my.cnf1.添加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.登录MySQL2.设置lower_case_table_namesSET GOLBAL lower_case_table_names = 1; 3.刷新权限FLUSH PRIVILEGES; 问题:1238 - Variable 'lower_case_table_names' is a read only variable
五、解决方案(docker方式)1.先备份MySQL数据库数据(1)通过命令去备份
(2)采用工具备份,如Navicat 2.停止MySQL3.找到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表名忽略大小写的资料请关注其它相关文章! |