【问题标题】:error in your SQL syntax check the manual that corresponds to your MySQL server version您的 SQL 语法错误检查与您的 MySQL 服务器版本相对应的手册
【发布时间】: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, cdate TINYTEXT UNSIGNED NOT NULL, ctime TINYTEXT 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 代码直接运行此脚本?

标签: php mysql sql


【解决方案1】:

你必须指定字符串的最大长度,比如:

CREATE TABLE `mytable` (
`cid` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ckey` TINYTEXT(10) UNSIGNED NOT NULL ,
`cdate` TINYTEXT(10) UNSIGNED NOT NULL ,
`ctime` TINYTEXT(10) UNSIGNED NOT NULL ,
`cuser` TINYTEXT(10) UNSIGNED NOT NULL ,
`ctext` LONGTEXT(10) UNSIGNED NOT NULL ,
`cstatus` TINYTEXT(10) UNSIGNED NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

其中 10 是您的值。希望有用

【讨论】:

  • 查询失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '(10) UNSIGNED NOT NULL 、cdate TINYTEXT(10) UNSIGNED NOT NULL 、ctime TINY' 附近使用正确的语法
【解决方案2】:

我不知道它是否回答了这个问题,因为我尝试通过 php 并且它不起作用所以我直接做了

CREATE TABLE `mytable` (
`cid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ckey` TINYTEXT NOT NULL ,
`cdate` TINYTEXT NOT NULL ,
`ctime` TINYTEXT NOT NULL ,
`cuser` TINYTEXT NOT NULL ,
`ctext` TEXT NOT NULL ,
`cstatus` TINYINT UNSIGNED NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2019-01-11
    相关资源
    最近更新 更多