首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我需要在MySQL中引用表名‘5e09c9c09e9ba0cceccb3701?

为什么我需要在MySQL中引用表名‘5e09c9c09e9ba0cceccb3701?
EN

Stack Overflow用户
提问于 2019-12-30 10:50:07
回答 1查看 229关注 0票数 4

上下文

我在我们的应用程序中遇到了一个与MySQL表名相关的bug。我们的应用程序以24十六进制数字(即:5e09c9c09e9ba0cceccb3701)的形式生成表名。

一切都进行了一段时间,但突然间,我们开始看到带有特定表名的SQL语法错误。这个bug很容易修复:我们需要保护表名。

SQL语法错误:

代码语言:javascript
复制
select * from 5e09c9c09e9ba0cceccb3701;

无错误:

代码语言:javascript
复制
select * from `5e09c9c09e9ba0cceccb3701`;

问题

为什么需要保护以5e09开头的表名?

我查看了保留字或十六进制文字表示法的MySQL文档,但在SQL语句中找不到对5e09的特殊解释的任何解释。

而且,如果有人知道,还有什么其他特殊前缀也可能破坏SQL语句的语法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-30 10:57:11

我猜想5E09被解析为一个数字(https://www.wolframalpha.com/input/?i=5E09),解析器很难将这个数字与表名的其余部分连接起来(推测),因为mysql允许以数字开头的表名,但要求它不只是由数字组成。

参见https://dev.mysql.com/doc/refman/8.0/en/identifiers.html,引用:

标识符可以以数字开头,但除非引用,否则不能仅由数字组成。

换句话说,所有以0-9E0-9开头的表名都应该显示相同的行为。

刚刚构造了一个本地mysql实例,该模式似乎与之匹配:

  • 5e0x不工作
  • 5f0x工作
  • 5 5eax工作

我会认为这是一个错误,尽管这是一个低优先级的错误:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59529563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档