由于我设计表时,忘了把排序规则修改为utf8_general_ci(多语言,不区分大小写)。故而查询时报了找不到表。
但是我的表是存在的。
所以最后发现我的排序规则是 utf8_bin 查询时不区分大小写.但是表已建好。没办法需要批量操作。
所以重点来了
第一步,用下面代码直接查询。不用修改任何值---直接复制复用就行。
SELECT TABLE_SCHEMA '数据库',TABLE_NAME '表',TABLE_COLLATION '原排序规则',CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.', TABLE_NAME, ' COLLATE=utf8mb4_general_ci;') '修正SQL'
FROM information_schema.`TABLES`
会出现下面的结果:
然后把修正sql中的sql进行执行就行了.
衍生:表的字段也会有如此的错误。
SELECT
TABLE_SCHEMA '数据库',
TABLE_NAME '表',
COLUMN_NAME '字段',
CHARACTER_SET_NAME '原字符集',
COLLATION_NAME '原排序规则',
CONCAT(
'ALTER TABLE ',
TABLE_SCHEMA,
'.',
TABLE_NAME,
' MODIFY COLUMN ',
COLUMN_NAME,
' ',
COLUMN_TYPE,
-- - 设置新的编码和排序规则
' CHARACTER SET UTF8 COLLATE utf8_bin',
( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),
( CASE WHEN COLUMN_COMMENT = '' THEN ' ' ELSE concat( ' COMMENT''', COLUMN_COMMENT, '''' ) END ),
';'
) '修正SQL'
FROM
information_schema.`COLUMNS`
WHERE
-- -过滤正确排序规则
COLLATION_NAME != '要过滤的正确排序规则'
-- -数据库名称
AND TABLE_SCHEMA = '你的数据库名称';