MySQL无法创建含数字+e+数字序列的表,请求分析原因
问题原因及解决方案
这个问题的核心是MySQL对数值和标识符的解析优先级冲突,你的表名刚好触发了MySQL的科学计数法数值解析逻辑,导致语法报错。
具体原因拆解:
- 当你执行
create table 28e78f70_xxx (...)时,MySQL看到字符串开头是数字28,后面跟着e——这刚好符合科学计数法的格式(数字+e+数字表示数字×10^数字),所以它会优先把28e78当成一个数值来解析。 - 但你的表名里
28e78后面还有f70_xxx,这部分对于数值来说是非法内容,MySQL无法继续解析,所以抛出语法错误,提示你在28e78f70附近有语法问题(其实它只解析到28e78就停了)。 - 而当你给表名加了前缀
e变成e28e78f70后,字符串以字母开头,MySQL会直接判定这是一个标识符(表名属于标识符),不会触发数值解析的逻辑,所以创建表的语句能正常执行。
解决方案:
有两种简单的方式可以解决这个问题:
- 用反引号包裹表名:强制MySQL将这个字符串识别为标识符,而不是数值。执行语句如下:
create table `28e78f70_4461_4950_8893_ad848dee55f1_20180517111601410` (id BIGINT) ROW_FORMAT=COMPACT - 调整表名格式:让表名不以数字开头(比如你已经尝试的加前缀方式),从根源上避免触发数值解析逻辑。
内容的提问来源于stack exchange,提问作者rajesh
相关产品推荐
相关产品推荐

