当标识符不是保留字或带空格时,为什么必须使用BACKTICKS?

时间:2017-01-28 08:36:28

标签: mysql sql syntax-error mariadb ddl

反击上没有错误。

DB [XXX]> create temporary table `123456e6` (`id` char (8));
Query OK, 0 rows affected (0.03 sec)

不使用反引号时出错。

DB [XXX]> create temporary table 123451e6 (`id` char (8));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1

我的标识符123451e6根据页面here有效,并且不是保留字或带空格或包含任何特殊字符。

2 个答案:

答案 0 :(得分:4)

您遇到了一个只有"数字的微妙案例"规则:

  

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

e字符用于数字的科学记数法,MySQL将123451e6解释为" 123451 * 10 6 "或123451000000.任何其他字母,但" e"会导致字符串遵守"不仅仅是数字"规则,可以不加引用。 E.g:

MariaDB [db]> create temporary table 123451f6 (`id` char (8));
Query OK, 0 rows affected (0.02 sec)

答案 1 :(得分:1)

它无效,因为12345e6形式的某些内容在此示例中评估为数字,特别是12345 * 10 6 。因此,您必须明确地将其标记为字符串。

相关问题