linux部署MySQL数据表名大小写问题

本文介绍了解决Linux环境下MySQL表名大小写敏感导致的问题,通过配置my.cnf文件中的lower_case_table_names参数为1实现表名不区分大小写,并提供了详细的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     项目在本地跑的时候没问题,但是部署在Linux后,就报错找不到相关数据表,但是查看数据库后发现明明存在,这是因为大小写问题。Linux对大小写是敏感的,尤其在开发quartz模块的时候,quartz内部查询数据的语句是大写的,如QRTZ_LOCKS、QRTZ_TRIGGERS等这些内部表。

    

        解决方案:其实很简单,让它对大小写不敏感即可,即在Linux上的MySQL的配置文件/etc/my.cnf中加入一行代码:

lower_case_table_names=1。my.cnf文件在下方会给完整代码。

    

      注意事项

虽然简单,但是有一些需要注意的地方:

1.lower_case_table_names参数详解:
      其中 0:区分大小写,1:不区分大小写
      MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
          1、数据库名与表名是严格区分大小写的;
          2、表的别名是严格区分大小写的;
          3、列名与列的别名在所有的情况下均是忽略大小写的;
          4、变量名也是严格区分大小写的;
      MySQL在Windows下都不区分大小写。
      如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:
          A、创建时设置:
            CREATE TABLE T(
                   A VARCHAR(10) BINARY
            );
          B、使用alter修改:
             ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
          C、mysql tableeditor中直接勾选BINARY项。


2.修改完配置之后,一定要重启数据库:

       service mysqld restart


3.再次查询数据表,这时发现不管查询SQL语句中的表名是大写还是小写都提示找不到此表了。

       原因是修改配置之后,会导致原来的大写的表名无法识别,这一点要特别注意。

       解决办法是:

        (1)在修改配置之前一定先将所有表的表结构和表数据导出做备份;

        (2)删除原来的表;

        (3)修改配置;

        (4)将表结构和表数据导入。

按照上面的步骤操作之后,再次查询数据表,表名就不区分大小写了。



配置完整版代码:my.cnf


在 Docker 部署MySQL 中,默认情况下是区分大小写的,这是因为 MySQL大小写敏感性由底层操作系统的文件系统特性决定。然而,你可以通过调整 MySQL 的配置项 `lower_case_table_names` 来控制是否区分大小写。 --- ### 解决方案 你需要修改 Docker Compose 或者直接传递给 MySQL 容器的启动命令参数,在其中添加对 `lower_case_table_names` 参数的设置。 以下是具体的步骤: #### 1. 修改 Docker Compose 文件 如果你使用的是 Docker Compose,可以在 `command` 字段中加入如下选项: ```yaml version: '3.1' services: db: image: biarms/mysql:5.7.30-linux-arm64v8 restart: always container_name: mysql environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123qwe!@# command: --default-authentication-plugin=mysql_native_password --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 # 添加此项以禁用大小写敏感 ports: - 3306:3306 volumes: - ./data:/var/lib/mysql ``` > **说明** >`--lower_case_table_names=1` 示强制将所有的都转换成小写字母处理,忽略其原有的大小写形式,并且查询时不区分大小写。 #### 2. 手动更新容器内配置文件 (适用于未使用 Compose) 如果你已经手动拉起了一个 MySQL 容器,则可以进入容器并编辑 MySQL 的配置文件 `/etc/my.cnf` 或 `/etc/mysql/my.cnf` (取决于镜像的具体情况),然后添加以下内容到 `[mysqld]` 节点下: ```ini [mysqld] lower_case_table_names = 1 ``` 完成后重启 MySQL 服务即可生效。 --- ### 注意事项 - 设置 `lower_case_table_names=1` 后,MySQL 内部会对所有新创建的自动转为小写存储。 - 如果你想启用该功能在一个已经有数据的实例上,请先确认当前库中没有混合大小写的同存在,否则可能导致冲突甚至无法正常访问数据库的情况发生。 - 此外需要注意的是,一旦设置了 lower_case_table_names 值之后就不建议再更改它了,因为这可能会导致意外的问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值