• 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
  • 相关阅读:
    【AI视野·今日Robot 机器人论文速览 第五十五期】Mon, 16 Oct 2023
    关于 MyBatis,10 种通用的写法分享
    webpack5学习进阶:模块、依赖与扩展功能(PostCSS、Web Works、TypeScript)
    上海某公司医疗实施工程师笔试题
    jenkins流水线学习(工具)
    hfctf_2020_marksman(劫持exit_hook或dlopen)
    源码学习系列——green-gis-server
    Web阶段一 静态网页
    均薪36W还缺人,DFT工程师到底有多重要?
    ORB-SLAM3在保存地图时高频率崩溃问题
  • 原文地址:https://blog.csdn.net/Dominic_W/article/details/133798962