MySQL 通过修改lower_case_table_names=1后造成原有数据库中用大写定义的表无法访问
异常信息
### Cause: java.sql.SQLSyntaxErrorException: Table 'legends_process_engine.xxx' doesn't exist
异常原因
开发之前在mysql里创建这张带有大写字母的表时,mysql还是默认的区分大小写设置(lower_case_table_names=0),即对大小写不敏感。
后来将mysql 设置lower_case_table_names=1,这时mysql就会强制以小写保存的表,后续再使用修改配置之前大写字母定义的表,就会报错说不存在!
解决方案
- 将MySQL 改成区分大小写( lower_case_table_names=0)
- 获取将库中所有表修改为小写的语句
SELECT
concat(
'rename table ',
table_name,
' to ',
lower(table_name),
';'
)
FROM
information_schema. TABLES
WHERE
table_schema = 'legends_process_engine';
- 执行修改语句
- 将MySQL 改成不区分大小写( lower_case_table_names=1)
备用语句
获取修改legends_process_engine中所有表名修改为小写的SQL语句
若要全部列修改为大写把 lower 函数改成UCASE即可
SELECT
concat(
'rename table ',
table_name,
' to ',
lower(table_name),
';'
)
FROM
information_schema. TABLES
WHERE
table_schema = 'legends_process_engine';
获取修改legends_process_engine中所有表列名修改为大写的SQL语句
若要全部列修改为小写把UCASE 函数改成lower即可
SELECT
concat( 'alter table ', TABLE_NAME, ' change column ', COLUMN_NAME, ' ', UCASE( COLUMN_NAME ), ' ', COLUMN_TYPE,' ',EXTRA,' comment "',COLUMN_COMMENT,'";' ) AS '修改脚本'
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'legends_process_engine'