2011-10-18 107 views
0

創建表的結果爲PHP的md5(microtime())作爲列名時,出現語法錯誤。作爲列名稱的MySQL哈希值

尤其是,錯誤可以取出一部分拋出與**圍繞着它:

CREATE TABLE form_data_38 (
    id   INT SIGNED auto_increment NOT NULL, 
    rltd_pri_key INT SIGNED NULL, 
    0accc77c084cc74a51dee479f8d095e3 TEXT(65535) NOT NULL, 
    **092e60b78f7804e86ea9a6e83701a929 TEXT(65535) NOT NULL**, 
    6734131796201537410e4d43635bf1b3 TEXT(65535) NULL, 
    PRIMARY KEY (id) 
) TYPE=InnoDB; 

什麼是困惑我是爲什麼它在該點被拋出,並在它之前沒有其他2個哈希值。我在列名後面加了'a',它創建了表沒問題。我搜索了MySQL的命名規則,到目前爲止我還沒有提出任何問題。它只是說所有的字母數字字符加'_'和'$'都可以使用,在這種情況下應該沒問題。

我錯過了什麼?

+0

我也應該注意到,這已經與其他散列值之前的工作。 –

+0

如果您找到答案,請將其作爲答案發布。如果您還沒有足夠的代表,請繼續爲此做出貢獻以獲得它,然後在您發佈時發佈!謝謝 –

+1

爲什麼你會用這樣的列名?! –

回答

1

把你的表和字段名反引號括:`09e4_fieldName`,至少對於那些能創造這樣的問題:

CREATE TABLE form_data_38 
    (id INT SIGNED auto_increment NOT NULL 
    , rltd_pri_key INT SIGNED NULL 
    , `0accc77c084cc74a51dee479f8d095e3` TEXT(65535) NOT NULL 
    , `092e60b78f7804e86ea9a6e83701a929` TEXT(65535) NOT NULL 
    , `6734131796201537410e4d43635bf1b3` TEXT(65535) NULL 
    , PRIMARY KEY (id) 
) 
ENGINE = InnoDB ;     --- ENGINE, not TYPE 
+0

最終的問題是列名被渲染爲科學記數法,因爲它們在其中有'e ##'(092 ** e60 ** b78f7804 ** e86 ** ea9a6e83701a929)。在反引號中包含列名(或者需要任何特定於提供者的引號)逐字地傳遞了該名稱並且沒有被分析。 –