• Linux数据库表名大小写敏感引发的异常


    我的问题

    最近跑了几个项目,用的是Linux数据库,总是出现找不到表的问题,百度一下,原来是表名大小写敏感问题。

    变量lower_case_table_names

    为什么本地开发没问题,但是测试环境就提示表不存在呢?因为本地的windows开发环境,默认是大小写不敏感。而测试环境的linux是敏感的。
    我们在Linux执行命令,查看自己电脑中的Linux系统变量可以看到:

    show variables like '%lower_case_table_names%';
    

    变量lower_case_table_names的取值

    取值范围有三个,分别是0、1、2.

    1. 设置成0:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时大小写敏感。

    2. 设置成1:表名转小写后存储到硬盘,比较时大小写不敏感。

    3. 设置成2:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时统一转小写比较。

    这个选项不仅仅适用于表名的大小写敏感,同样适用于数据库名和表别名。

    解决方案1:修改变量lower_case_table_names(不要试了,会出现重启失败问题)

    #修改mysql配置文件
    vi /etc/my.cnf
    #增加如下配置选项
    [mysqld]
    lower_case_table_names=1
    #重启mysql服务
    systemctl restart mysqld
    

    mysql docker 容器中的配置文件位置:

    /etc/mysql/my.cnf
    

    如果 docker 中没有 vim,执行以下命令

    apt-get update
    
    apt-get install vim
    

    解决方案2:重新安装mysql,并指定lower_case_table_names=1(可行)

    重新启动mysql,如果是第一次安装,那么docker后面直接加--lower-case-table-names=1是可以的。

    如果不是第一次装,需要卸载掉原有的mysql,-v /home/mysql/data:/var/lib/mysql 这里指定一个新的,干净的数据仓库。然后再--lower-case-table-names=1即可。原有:

    原有:

    docker run --name mysql --restart=always \
        -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
        -v /home/mysql/data:/var/lib/mysql \
        -p 3317:3306 \
        -e MYSQL_ROOT_PASSWORD="root" \
        -e TZ=Asia/Shanghai \
        -d mysql:8.0
    

    修改:

    docker run --name mysql --restart=always \
        -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
        -v /home/mysql/data2:/var/lib/mysql \
        -p 3317:3306 \
        -e MYSQL_ROOT_PASSWORD="root" \
        -e TZ=Asia/Shanghai \
        -d mysql:8.0 --lower-case-table-names=1
    

    其中/home/mysql/data2为新建的目录即可, 但是这种做法,最好数据要备份,防止丢失。

  • 相关阅读:
    2015南阳CCPC L
    2015南阳CCPC H
    2015南阳CCPC G
    2015南阳CCPC D
    2015南阳CCPC C
    2015南阳CCPC A
    2015长春赛区总结(其实是流水账
    Codeforces Round #326 (Div. 2) D. Duff in Beach dp
    Codeforces Round #326 (Div. 2) C. Duff and Weight Lifting 水题
    Codeforces Round #326 (Div. 2) B. Duff in Love 分解质因数
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/16043854.html
Copyright © 2020-2023  润新知