时间戳的mysql语法错误

时间:2010-05-02 20:44:54

标签: sql mysql

我有这条SQL被提供给Mysql。

CREATE TABLE pn_history(
 member INT,
 action INT,
 with INT,
 timestamp DATETIME,
 details VARCHAR(256)
)

但是作为语法错误回来了。

#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 'with INT,
timestamp DATETIME,
details VARCHAR(256)
)' at line 4 

为什么会失败?

3 个答案:

答案 0 :(得分:2)

MySQL中的'with'和'timestamp'都是reserved words。所以为了让它发挥作用,你需要逃避每一个:

CREATE TABLE pn_history(
 member INT,
 action INT,
 `with` INT,
 `timestamp` DATETIME,
 details VARCHAR(256)
)

但实际上,您需要考虑更改列identifiers的名称。

详细了解MySQL Reserved Words

编辑:实际上,TIMESTAMP不是保留字。文档说:

  

MySQL允许使用一些关键字   作为不带引号的标识符,因为很多   人们以前用过它们。例子   是以下列表中的那些:

     
      
  • ACTION
  •   
  • BIT
  •   
  • DATE
  •   
  • ENUM
  •   
  • NO
  •   
  • TEXT
  •   
  • `TIME
  •   
  • TIMESTAMP
  •   

所以我猜这意味着同伴压力从保留词列表中取出TIMESTAMP。哈!

答案 1 :(得分:0)

问题是with列的名称。将名称更改为withValue

CREATE TABLE pn_history(
 member INT,
 action INT,
 withValue INT,
 timestamp DATETIME,
 details VARCHAR(256)
)

答案 2 :(得分:0)

timestamp是一个关键字(它是mysql中的数据类型),可能会导致问题。

我建议使用其他名称,但如果必须将其命名为timestamp,请尝试使用反引号来引用它。