mysql - 使用关键字作为列名时出现错误 1064 (42000)

Posted

技术标签:

【中文标题】mysql - 使用关键字作为列名时出现错误 1064 (42000)【英文标题】:mysql - ERROR 1064 (42000) when using keywords as column name 【发布时间】:2012-09-04 05:34:07 【问题描述】:

这有什么问题? 在 Gentoo 系统上成功运行此程序,但现在在 Debian-Squeeze (Raspberry PI) 上无法运行。

数据库设置好了

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| arduino1           |
| mysql              |
| performance_schema |
| test               |
| tmp                |
+--------------------+
6 rows in set (0.01 sec)

mysql>

命令是:

#mysql -u root -p******* arduino1 < arduino-tables.sql

导致:

ERROR 1064 (42000) at line 1: 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 '(8),
    currentTime DATETIME,
    timeDiff INT(10),
    unixTime INT(10),
    currentR1 FL' at line 3

arduino-tables.sql 的内容:

#cat arduino-tables.sql:

CREATE TABLE pulseLog (
    id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
    timeStamp TIMESTAMP(8),
    currentTime DATETIME,
    timeDiff INT(10),
    unixTime INT(10),
    currentR1 FLOAT,
    currentS2 FLOAT,
    currentT3 FLOAT,
    currentAverageR1 FLOAT,
    currentAverageS2 FLOAT,
    currentAverageT3 FLOAT,
    temp0 FLOAT,
    temp1 FLOAT,
    temp2 FLOAT,
    temp3 FLOAT,
    temp4 FLOAT,
    temp5 FLOAT,
    pulses INT,
    event char(255),
 ) CHARACTER SET UTF8;

【问题讨论】:

【参考方案1】:

有一些拼写错误,例如 timestamp 是关键字,后面有一个额外的逗号 event char(255),.

试试这个:

    CREATE TABLE pulseLog (
    id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
    `timeStamp` TIMESTAMP,
    `currentTime` DATETIME,
    `timeDiff` INT(10),
    `unixTime` INT(10),
    `currentR1` FLOAT,
    `currentS2` FLOAT,
    `currentT3` FLOAT,
    `currentAverageR1` FLOAT,
    `currentAverageS2` FLOAT,
    `currentAverageT3` FLOAT,
    `temp0` FLOAT,
    `temp1` FLOAT,
    `temp2` FLOAT,
    `temp3` FLOAT,
    `temp4` FLOAT,
    `temp5` FLOAT,
    `pulses` INT,
    `event` char(255)
 ) CHARACTER SET UTF8;

这里是SQL Fiddle DEMO

编辑:

除此之外,您的时间戳语法不受支持。 有关日期、日期时间和时间戳的参考check here

【讨论】:

就是这样!谢谢你们俩。愚蠢的错误,但奇怪的是我的 Gentoo 系统买了它......【参考方案2】:

您使用的关键字是datatype。您可以通过使用backtick 示例转义它来做到这一点

CREATE TABLE pulseLog (
    id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
    `timeStamp` TIMESTAMP(8),
    `currentTime` DATETIME,
    `timeDiff` INT(10),
    `unixTime` INT(10),
    currentR1 FLOAT,
    currentS2 FLOAT,
    currentT3 FLOAT,
    currentAverageR1 FLOAT,
    currentAverageS2 FLOAT,
    currentAverageT3 FLOAT,
    temp0 FLOAT,
    temp1 FLOAT,
    temp2 FLOAT,
    temp3 FLOAT,
    temp4 FLOAT,
    temp5 FLOAT,
    pulses INT,
    event char(255),
 ) CHARACTER SET UTF8;

【讨论】:

以上是关于mysql - 使用关键字作为列名时出现错误 1064 (42000)的主要内容,如果未能解决你的问题,请参考以下文章

sql 触发器在将列名存储在变量中并将其用于 sql 触发器中的 OLD.myvar 时出现错误

尝试子查询时出现不明确的列名错误

使用 HSQLDB 关键字的奇怪行为

执行查询时出现“选择列表中的列名无效”错误

将pandas DataFrame写入sql时出现无效列名错误

使用 JDBC 获取与 MySQL 的连接时出现“连接过多”