2016-11-11 74 views
0

昨天我偶然发现了一个奇怪的问题。尝试使用名称创建数据库时出现语法错误:9e1617bafr1_1

我有一个PHP脚本,基于某些输入为我创建mysql数据库。

当脚本试图用名称“9e1617bafr1_1”(不含引号)生成数据库时,出现此错误“MySQL错误1064:您的SQL语法错误”。

查询CREATE DATABASE IF NOT EXISTS 9e1617bafr1_1

当试图执行它https://de.piliapp.com/mysql-syntax-check/http://sqlfiddle.com/

我之前通过和数据库名称后使用反引号解决它,但我仍然不知道为什么我有我也得到了错误在创建“9d1617bafr1_1”,“9f1617bafr1_1”等时,首先出现这种错误的工作完美无瑕。

不幸的是,我没有在互联网上发现这种行为有用,因为我很好奇它,我想问问有没有人知道这是一个保留字还是以任何方式违反SQL标准?

+0

这是因为你的名字以数字开头而不是char。尝试e91617bafr1_1 – scaisEdge

+0

不,它不是MySQL保留字。而且,不,它不违反SQL标准......我相信该标准将标识符的规则留给实现。 (不同的数据库有不同的规则,我认为这些规则与标准是“兼容的”。)MySQL错误是因为解析器将令牌“9e1617”看作*数字文字*,其中*标识符*是预期的。 – spencer7593

回答

2

9e1617bafr1_1被解析为数字(9e1617)后跟一个字符串(bafr1_1)。您的其他尝试“9d1617bafr1_1”和“9f1617bafr1_1”不是以科学记数法开始,因此不会以这种方式进行解析。

相关问题