Azure MySQL 5.7实例执行show tables出现重复表 咨询可能原因
Azure MySQL 5.7 执行
show tables出现重复表名的可能成因 - 表名包含不可见特殊字符:两个表名视觉上完全一致,但其中一个的开头、结尾或中间插入了空格、零宽空格、换行符等不可见Unicode字符,MySQL允许标识符包含这类字符,常规输出无法区分。可执行
SELECT table_name, HEX(table_name) FROM information_schema.tables WHERE table_schema = '当前数据库名' AND table_name LIKE '%bookings%';对比两个表名的十六进制编码,即可确认是否存在隐藏字符。 - 大小写敏感配置导致的展示问题:Azure MySQL的
lower_case_table_names参数如果为0(大小写敏感模式),如果曾创建过大小写不同的同名表(比如Bookings和bookings),而你当前使用的客户端默认将输出统一转为小写展示,就会出现重复表名的视觉效果。可执行show variables like 'lower_case_table_names';确认参数配置,同时查询information_schema表获取原始表名的大小写形式验证。 - 库元数据损坏:如果实例近期发生过异常重启、备份恢复故障、磁盘IO错误,可能导致
information_schema.tables系统表的元数据损坏,生成重复的表记录。可尝试执行flush tables;后重新执行show tables,确认重复记录是否消失,也可以用同一份备份在测试环境恢复验证问题是否复现。 - 旧客户端对分区表的展示bug:部分低版本MySQL客户端对分区表的解析存在缺陷,会把同一个表的不同分区识别为独立的表重复输出。可执行
SHOW CREATE TABLE bookings;确认表是否为分区表,同时升级本地MySQL客户端到最新稳定版后重新查询验证。 - 表和视图重名:如果创建了和普通表同名的视图,部分版本的
show tables输出不会区分表和视图类型,看起来就是两个相同的名称。可执行SHOW FULL TABLES WHERE Table_name LIKE '%bookings%';查看返回结果的Table_type字段,普通表值为BASE TABLE,视图值为VIEW,即可快速区分。
内容的提问来源于stack exchange,提问作者nitin jain
相关产品推荐
相关产品推荐

