为什么我需要在MySQL中引用表名“5E09C9C09E9BA0CCBCB3701”? 上下文
我在应用程序中遇到了一个与MySQL表名相关的错误。我们的应用程序将表名生成为24位十六进制数字(即:为什么我需要在MySQL中引用表名“5E09C9C09E9BA0CCBCB3701”? 上下文,mysql,sql,syntax,Mysql,Sql,Syntax,我在应用程序中遇到了一个与MySQL表名相关的错误。我们的应用程序将表名生成为24位十六进制数字(即:5E09C9C09E9BA0CCECB3701) 有一段时间一切正常,但突然我们开始看到某些表名出现SQL语法错误。这个bug很容易修复:我们需要保护表名 SQL语法错误: 从5E09C9C09E9BA0CCECBCB3701中选择*; 无错误: 从'5E09C9C09E9BA0CCECBCB3701'中选择*; 问题: 为什么需要保护以5e09开头的表名 我查阅了MySQL文档中的保留字
5E09C9C09E9BA0CCECB3701
)
有一段时间一切正常,但突然我们开始看到某些表名出现SQL语法错误。这个bug很容易修复:我们需要保护表名
SQL语法错误:
从5E09C9C09E9BA0CCECBCB3701中选择*;
无错误:
从'5E09C9C09E9BA0CCECBCB3701'中选择*;
问题: 为什么需要保护以
5e09
开头的表名
我查阅了MySQL文档中的保留字或十六进制文字符号,但在SQL语句中找不到对5e09
的特殊解释的任何解释
而且,如果有人知道,还有什么特殊前缀可能会破坏SQL语句的语法?我猜5E09被解析为一个数字(),解析器难以将这个数字与表名的其余部分连接起来(推测),因为mysql允许表名以数字开头,但要求它不仅仅由数字组成 见,引述: 标识符可以以数字开头,但除非引用,否则不能仅由数字组成 换句话说,所有以[0-9]E[0-9]开头的表名都应该显示相同的行为 刚刚启动了一个本地mysql实例,模式似乎匹配:
- 5e0x不起作用
- 5f0x确实有效
- 5eax确实有效
<>我想把它归类为一个bug,尽管它是一个低优先级的一个):你试过另一个名字吗?类似于5E09C9C09E9BA0CCBCB3701K的内容?引用了“建议您不要使用以Me或MeN开头的名称,其中M和N是整数。”,“使用MD5()生成表名时要小心,因为它可以生成非法或不明确格式的名称”,您可以在官方mysql开发频道上使用此作为参考。