flowable mysql 表名大小写问题

在部署一个工作流项目(flowable)时,这边把测试库的表直接还原到正式环境,在启动后发现flowable又单独建了一套大写的表名表,之前因为是在windows下创建,表名默认是小写,windows下没有问题,linux下无法识别小写表名。

排查问题

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

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

在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启动时会报权限错误。

相关推荐
小丑西瓜6666 小时前
CMake基础用法,cmake_minimum_required,project,add_executable
linux·服务器·c++·camke
晚风吹长发6 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
私人珍藏库6 小时前
[Windows] 桌面整理 Desk Tidy v1.2.3
windows·工具·软件·win·多功能
C++ 老炮儿的技术栈6 小时前
不调用C++/C的字符串库函数,编写函数strcpy
c语言·开发语言·c++·windows·git·postman·visual studio
大熊背6 小时前
多核架构中,RTOS小核跑sensor 的normal模式,大核linux核跑WDR模式,将小核的曝光时间映射到WDR模式中的曝光时间的方法
linux·自动曝光·wdr
全栈测试笔记6 小时前
异步函数与异步生成器
linux·服务器·前端·数据库·python
weixin_462446237 小时前
Linux 下使用 xfreerdp3 远程连接 Windows(从安装到实战使用)
linux·运维·windows
EndingCoder7 小时前
配置 tsconfig.json:高级选项
linux·前端·ubuntu·typescript·json
爱丶狸7 小时前
Linux三剑客之sed
linux·运维·服务器
Knight_AL7 小时前
MySQL InnoDB 锁机制深度解析:行锁、表锁、间隙锁、临键锁(Next-Key Lock)
数据库·mysql