TiDB中如何删除名称包含制表符( )的表?
TiDB删除含制表符的表的解决方案
步骤1:精确获取带制表符的表名
直接通过系统表INFORMATION_SCHEMA.TABLES查询,能精准返回表名的原始字符(包括制表符):
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_name LIKE '%ex_secure_TM_ROLE_UPLOAD%';
执行后复制结果里的完整表名,确保包含那个制表符,不要手动输入(手动输入的制表符可能因客户端/终端解析问题和实际表名不匹配)。
步骤2:用反引号包裹表名执行删除
把复制到的完整表名用反引号括起来,执行删除命令:
DROP TABLE `ex_secure_TM_ROLE_UPLOAD `; -- 此处的制表符为查询结果复制所得,勿手动输入
反引号的作用是告诉TiDB这是完整的标识符,避免把制表符解析成其他字符。
步骤3:验证删除结果
再次查询系统表确认表已移除:
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_name LIKE '%ex_secure_TM_ROLE_UPLOAD%';
为什么之前的操作无效?
- 手动输入制表符时,不同终端或客户端可能会对其进行转义(比如变成空格),导致传入TiDB的字符和实际表名不匹配;
SHOW CREATE TABLE手动输入带制表符的表名时,同样会因为输入的制表符和表名原始字符不一致,导致无法找到目标表,而INFORMATION_SCHEMA的查询是基于数据库存储的原始字符匹配,可靠性更高。
内容的提问来源于stack exchange,提问作者Wink Yao
相关产品推荐
相关产品推荐

