【发布时间】:2014-01-27 00:09:05
【问题描述】:
CREATE TABLE `mytable` (
`cid` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ckey` TINYTEXT UNSIGNED NOT NULL ,
`cdate` TINYTEXT UNSIGNED NOT NULL ,
`ctime` TINYTEXT UNSIGNED NOT NULL ,
`cuser` TINYTEXT UNSIGNED NOT NULL ,
`ctext` LONGTEXT UNSIGNED NOT NULL ,
`cstatus` TINYTEXT UNSIGNED NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
MySQL 说:
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'UNSIGNED NOT NULL,
cdateTINYTEXT UNSIGNED NOT NULL,ctimeTINYTEXT UNSIGNED' 附近使用正确的语法
更新完整代码:
$query = "
CREATE TABLE mytable (
cid INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
ckey TINYTEXT(10) NOT NULL ,
cdate TINYTEXT(10) NOT NULL ,
ctime TINYTEXT(10) NOT NULL ,
cuser TINYTEXT(10) NOT NULL ,
ctext LONGTEXT(10) NOT NULL ,
cstatus TINYTEXT(10) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT = 1;";
【问题讨论】:
-
TINYTEXT不是整数类型,所以UNSIGNED没有意义。它只对整数类型列有意义。 -
我会警告您不要使用
TINYINT作为您的自动递增主键,除非它确实适合您的业务需求。这只会为您提供 255 个可能的值。 -
UNSIGNED 被删除仍然得到错误 $query = "CREATE TABLE IF NOT EXISTS 'mytable' ('id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 'ckey' TINYTEXT NOT NULL , 'cdate' TINYINT NOT NULL , 'ctime' TINYINT NOT NULL , 'cuser' TINYINT NOT NULL , 'ctext' LONGTEXT NOT NULL , 'cstatus' TINYINT NOT NULL ) ENGINE = MyISAM 默认字符集 = utf8 AUTO_INCREMENT = 1;";查询失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''mytable'('id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 'ckey' TINYTEXT N' 附近使用正确的语法
-
该错误看起来像您在 mytable 周围有单引号。它不需要引号,但可以用反引号引用。
-
上述错误将第一列显示为
id(而不是发布示例中的cid)。您可以将您的真实查询发布到您的原始问题中吗?您是否也尝试过不通过(显然)PHP 代码直接运行此脚本?