昨天我偶然发现了一个奇怪的问题。尝试使用名称创建数据库时出现语法错误: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标准?
这是因为你的名字以数字开头而不是char。尝试e91617bafr1_1 – scaisEdge
不,它不是MySQL保留字。而且,不,它不违反SQL标准......我相信该标准将标识符的规则留给实现。 (不同的数据库有不同的规则,我认为这些规则与标准是“兼容的”。)MySQL错误是因为解析器将令牌“9e1617”看作*数字文字*,其中*标识符*是预期的。 – spencer7593