• MySQL报错 table “xxx” doesn‘t exit


    问题描述

    以前项目的数据库部署在云端Windows Server系统上,最近有需求要把数据库移到CentOS7的服务器上,数据转移到时候一切正常,并且使用Navicat for MySQL访问数据库的时候也没有异常,但是项目实际运行起来的时候接口一直在报错,根据错误提示信息发现,好多表不存在:
    在这里插入图片描述

    报错原因

    MySQL在Windows下不区分大小写,但是在Linux系统中默认是区分大小写的,上述问题就是由于英文字母大小写敏感导致的。

    MySQL大小写敏感配置相关的两个参数,lower_case_file_systemlower_case_table_names

    查看当前MySQL的大小写敏感配置,可以使用如下语句
    在这里插入图片描述

    lower_case_file_system

    代表当前系统文件是否大小写敏感,只读参数,无法修改。ON 大小写不敏感,OFF 大小写敏感。这个参数描述的是数据库当前所在的操作系统的文件目录是否大小写敏感,OFF表示大小写敏感,ON表示大小写不敏感。此参数是只读的。

    lower_case_table_names

    代表表名是否大小写敏感,可以修改,参数有0、1、2三种。

    • 0 大小写敏感。(Unix,Linux默认) 创建的库表将原样保存在磁盘上,SQL语句也会原样解析。
    • 1 大小写不敏感。(Windows默认) 创建数据库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的表,即便执行select * from Testtable,也会被转换成select * from testtable,致使报错表不存在。
    • 2 大小写不敏感(OS X默认) 创建的库表将原样保存在磁盘上, 但SQL语句将库表名转换成小写。

    解决方法

    • 修改配置文件,在Linux系统中修改my.cnf文件,在Windows下修改my.ini文件,新增或修改以下内容。
    lower_case_table_names = 0 或 lower_case_table_names = 1
    ``
    - 重启MySQL服务
    ```shell
    > service mysqld restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    如果要将lower_case_table_names从0(敏感)修改为1(不敏感)时,必须先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1,否则依然会出现无法找到表名的问题。
    
    • 1
  • 相关阅读:
    C语言 每日一题 PTA 11.8 day14
    Linux代码初试__进度条
    操作系统MIT6.S081:P4->RISC-V calling conventions and stack frames
    Sentinel配置的blockHandler方法不生效
    Socks5代理IP是什么?安全吗?
    驱动开发:探索DRIVER_OBJECT驱动对象
    MessageQueue消息队列——基础(笔记)
    固态硬盘SSD格式化后,数据恢复的可能性有多大?
    CSS关于默认宽度
    W3C发布WebAssembly 2.0首个草案
  • 原文地址:https://blog.csdn.net/Dominic_W/article/details/133798962