php - 具有哈希列名称的 CREATE TABLE 语句中的 MySQL 语法错误

标签 php mysql

我正在将 xls/csv 文件解析到数据库中。对于每个文件,我都有一个表,其中的列以文件列名称的哈希值命名。

对于列

  • 纳兹维斯科
  • 我是
  • 地址1
  • 地址2
  • 老城
  • 电话
  • 科德
  • 电子邮件
  • Województwo

我有 SQL:

CREATE TABLE premium_import_temp_worksheet_9 (
id                       INTEGER NOT NULL AUTO_INCREMENT,
f37c4446e4a882972cd3a80053dd795f VARCHAR(255),
d5bfdd6746ff1a364399acb6e6526b7a VARCHAR(255),
f7e2db7542ea17f0fcc1a46ee21f860b VARCHAR(255),
7161b0ab070daf8e20a2b62f2ef13b81 VARCHAR(255),
4f4e297d754b67e7a104f58b2bcdb850 VARCHAR(255),
0975cf6baccb3862c31522c2b5b8fabc VARCHAR(255),
d1c0419824dea874935502cf6d7c946f VARCHAR(255),
ce8ae9da5b7cd6c3df2929543a9af92d VARCHAR(255),
d7f1213d49993b7ce9ce02463ea1eeda VARCHAR(255),
                 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

一切都没有任何错误地执行,但是:

  • 公司名称
  • 电话
  • sffd
  • 自卫队
  • sdfff

我有:

CREATE TABLE premium_import_temp_worksheet_8 (
id                       INTEGER NOT NULL AUTO_INCREMENT,
e7b47c58815acf1d3afa59a84b5db7fb VARCHAR(255),
bcc254b55c4a1babdf1dcb82c207506b VARCHAR(255),
6e87a4f6ea8244d7e04cb52e495d6693 VARCHAR(255),
d9729feb74992cc3482b350163a1a010 VARCHAR(255),
c90e651df62a9057d9bc8f48b42da7d0 VARCHAR(255),
                 PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

和错误:

mysqlt error: [1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '6e87a4f6ea8244d7e04cb52e495d6693 VARCHAR(255), d9729feb74992cc3482b350163a1a010 ' at line 5] in EXECUTE("CREATE TABLE premium_import_temp_worksheet_7 ( id INTEGER NOT NULL AUTO_INCREMENT, e7b47c58815acf1d3afa59a84b5db7fb VARCHAR(255), bcc254b55c4a1babdf1dcb82c207506b VARCHAR(255), 6e87a4f6ea8244d7e04cb52e495d6693 VARCHAR(255), d9729feb74992cc3482b350163a1a010 VARCHAR(255), c90e651df62a9057d9bc8f48b42da7d0 VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci")

我不知道这两个语句的语法有什么区别。请帮忙。

最佳答案

您所观察到的似乎是一个错误。摘自documentation :

Identifiers may begin with a digit but unless quoted may not consist solely of digits.

混淆似乎是由于“6e87”是一个有效数字,即使它不完全由数字组成。这是指数表示法。出于某种原因,尽管不带引号的标识符可以以数字开头,但它不能以指数表示法的数字开头。

这很容易通过用反引号或双引号引用标识符来解决。

编辑:

您可以使用这两个简单的查询来复制问题:

select 6 as 5_1

select 6 as 5e1

select 6 as 5f1

select 6 as 5e1f

第一部和第三部作品。第二个正确地失败了,因为标识符是一个数字(指数形式)。最后一个错误地失败了。 顺便说一句,我认为以数字开头的标识符是个坏主意,但这与 MySQL 的行为方式是不同的。

关于php - 具有哈希列名称的 CREATE TABLE 语句中的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960154/

相关文章:

php - 过滤已请求的数据

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - mysql查询计算整行中的空格或单词

php - 使用 PHP simpleXML 提取 XML 数据

php - 使用 PDO 在两个数据库之间传输 mysql 表

mysql - 一起运行选择和更新查询

php - mysql_num_rows PHP

mysql - 优化缓慢的 MySQL 选择查询

php - 如何在 PhpStorm 中设置命名空间排序顺序?

php - Laravel 4 where in condition with DB::select 查询