在使用 PHP 的 md5(microtime())
结果作为列名称创建表时遇到语法错误。
特别是,错误被抛出在 ** 周围的部分:
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 命名规则,但到目前为止我还没有想出任何东西。它只是说所有字母数字字符加上“_”和“$”都可以使用,在这种情况下应该没问题。
我错过了什么?
最佳答案
将表和字段名称放在反引号中:`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
关于MySQL 哈希值作为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808435/