mysql大小写敏感导致程序无法启动的问题

 更新时间:2023年11月04日 09:03:56   作者:何锦康  
这篇文章主要介绍了mysql大小写敏感导致程序无法启动的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql大小写敏感导致程序无法启动

将数据库转移到centos服务器上之后,项目启动一直报找不到XXX Table,但是数据库中存在这个表,对比了一下发现报错信息的表名发现是大写字母,就考虑到了可能换了环境,区分大小写了,于是更改了mysql的配置文件

1.先找到配置文件的位置

2.进入该目录,编辑该配置文件

3.加上这样一句话,1表示不区分,0表示区分

lower_case_table_names=1

再次启动项目,启动成功!

mysql表大小写敏感规则引发的问题

踩坑原因

在部署一个工作流项目(flowable)时,该项目用到了自动创建表的一个机制,没看源代码但是大体意思就是检测不到数据库中有表的存在程序就自己创建。

windows下没有问题,linux下报一些奇怪的错误。

排查

描述问题前先描述一下项目的关系因为的确有点乱 。

flowable 项目是要搭建的项目在gitee上托管,我们暂时称之为f1然后这个项目又是基于github上的一个项目改的,这个项目我们暂时称为f2。

程序自动建表如果完成的很好那当然是大吉大利。自动建表操作是f2来做的,它所建的表都是些核心表,表名为大写。前面说了f1 是在f2 上面扩展的那必然就会有自己的表。只依靠f2自动建表是不行的,项目根本跑不起来。f1提供了initsql,sql中包含了所有的表,有自己的还有f2的那些核心表,表名均为小写。

部署过程先把服务器上的数据库建好然后导入数据,一切正常数据库出现了一堆小写的表。运行f1程序,报错信息是一些表外建重复定义之类的。这时再看数据库出现了很多大写的表名。和小写表名重复的。比如 act_ru_job ACT_RU_JOB。第一次看到有点懵。为什么windwos下没有问题,到linux下就又问题了。把windows下的程序数据库连接换为Linux的一样报错。这下明白肯定是操作系统间不同的机制导致出的幺蛾子。

疯狂google了一番找到了相关信息。

在mysql中执行下面语句

show variables like '%lower_case_table_names%';

表现的值有三种 0 1 2。

  • 0 linux 下默认规则,表名区分大小写。
  • 1 windows 下默认规则,表名存储在磁盘是小写的,但是比较的时候是不区分大小写。
  • 2 macos,下默认规则,表名存储为给定的大小写但是比较的时候是小写的

这下才明白,程序为啥一直检测不到表存在,然后自己创建。原因就是linux下大小写严格区分的,改为和windwos下的值一样就可以了。事情不会那么简单。

限制

找到my.conf在[mysqld] 下添加 lower_case_table_names=1,保存重启。mysql跑不起来,官方文档上写这个参数只能在数据库初始化操作之前添加,如果数据库已经初始化完成了就不能再添加了,那么怎么办呢?

如果没有重要数据直接删除数据目录,执行 mysqld --initialize --user=mysql --lower-case-table-names=1 要加上–user=mysql。不然数据目录所有者是root启动时会报权限错误。

有数据的话先导出设置好后再导入。

心得:

因为这个破问题搞了好几个小时,实属恶心。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL数据库查询性能优化的4个技巧干货

    MySQL数据库查询性能优化的4个技巧干货

    这篇文章主要为大家介绍了MySQL数据库查询性能优化的4个技巧干货详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • MySQL百万数据深度分页优化思路解析

    MySQL百万数据深度分页优化思路解析

    这篇文章主要为大家介绍了MySQL百万数据深度分页优化思路分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • MySQL表的基本查询操作大全(这一篇够了)

    MySQL表的基本查询操作大全(这一篇够了)

    表的增删查改,简称表的 CURD 操作 : Create(创建),Update(更新),Retrieve(读取),Delete(删除),这篇文章主要介绍了MySQL表的基本查询操作,感兴趣的朋友一起看看吧
    2024-02-02
  • MySQL Replication中的并行复制示例详解

    MySQL Replication中的并行复制示例详解

    MySQL在5.6版本之前,主从复制的从节点上有两个线程,分别是I/O线程和SQL线程,今天通过本文给大家介绍MySQL Replication中的并行复制示例详解,感兴趣的朋友一起看看吧
    2022-07-07
  • 总结MySQL的分区

    总结MySQL的分区

    本文先是介绍了分区,而后又分别说明了怎样判断是否支持分区和如何删除增加分区,对分区的总结很详细,下面一起来看看吧。
    2016-08-08
  • MySQL中utf8mb4排序规则示例

    MySQL中utf8mb4排序规则示例

    本文主要介绍了MySQL中utf8mb4排序规则,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • MySQL中的常用函数及用法总结

    MySQL中的常用函数及用法总结

    MySQL是一种常用的关系型数据库管理系统,它提供了许多内置函数来处理数据,本文将介绍MySQL中的各种常用函数,包括字符串函数、日期函数、数学函数、聚合函数等,需要的朋友可以参考下
    2023-06-06
  • Mysql 5.6

    Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

    这篇文章主要介绍了Mysql 5.6 “隐式转换”导致的索引失效和数据不准确的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MySQL与SQL Server的一些区别浅析

    MySQL与SQL Server的一些区别浅析

    这篇文章主要介绍了MySQL与SQL Server的一些区别浅析,本文罗列了MySQL与SQL Server的25个不同的地方,并对它们的分页技术的不同做了讲解,需要的朋友可以参考下
    2014-08-08
  • MYSQL大小写不敏感导致用户登录异常问题

    MYSQL大小写不敏感导致用户登录异常问题

    这篇文章主要介绍了MYSQL大小写不敏感导致用户登录异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论