开发者

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

目录
  • 说明
  • 一、摘要
  • 二、查看服务器上mysql情况
    • 方式一:通过linux方式
    • 方式二:借助可视化工具(Navicat)
  • 三、MySQL设置忽略表名大小写的参数(lower_case_table_names)
    • 四、网上解决方案
      • 方法一:只修改my.cnf
        • 1.添加lower_case_table_names=1
        • 2.保存并退出
        • 3.重启MySQL
      • 问题:
        • 方法二:临时设置
          • 1.登录MySQL
          • 2.设置lower_case_table_names
          • 3.刷新权限
        • 问题:
        • 五、解决方案(docker方式)
          • 1.先备份MySQL数据库数据
            • 2.停止MySQL
              • 3.找到MySQL数据存放路径
                • 4.备编程客栈份数据目录
                  • 5.清空之前的数据目录
                    • 6.配置docker compose的MySQL
                      • 7.重新用docker compose命令运行一个MySQL容器
                        • 8.查看启动日志
                          • 9.将数据恢复
                            • 10.验证

                            说明

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

                            一、摘要

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

                            二、查看服务器上MySQL情况

                            方式一:通过Linux方式

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

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

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

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

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

                            javascript、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] 部分新增

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

                            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

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

                            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

                            注:如果之前存在先删除之前旧的运行MySwww.devze.comQL容器。

                            在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"

                            配置如下:

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

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

                            docker compose up -d mysql

                            8.查看启动日志

                            docker logs 容器名/容器id

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

                            9.将数据恢复

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

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

                            10.验证

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

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

                            以上就是Linux环境下设置MySQL表名忽略大小写的方法小结的详细内容,更多关于 Linux MySQL表名忽略大小写的资料请关注编程客栈(www.devze.com)其它相关文章!

                            0

                            上一篇:

                            下一篇:

                            精彩评论

                            暂无评论...
                            验证码 换一张
                            取 消

                            最新数据库

                            数据库排行榜