【问题标题】:Unknown syntax error in MySQL statementMySQL 语句中的未知语法错误
【发布时间】:2015-06-07 00:06:52
【问题描述】:

我正在使用下面的 CREATE TABLE 语句

CREATE TABLE IF NOT EXISTS users (
`uuid` varchar(36) NOT NULL,
`json` varchar(MAX) NOT NULL,
PRIMARY KEY (`uuid`)
);

但是我不断收到此错误。

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 附近使用的语法 'MAX) 非空, 主键 (uuid) )' 在第 3 行

对我来说毫无意义。

【问题讨论】:

  • max 是保留字。 theMax怎么样...不,数字怎么样
  • 即使没有 (MAX) 我也会得到错误。
  • varchar(60000) ?, varchar(255) ?
  • 有效,但是正在将行 json 从 varchar 转换为 text。
  • 对不起,我曾经在 dif 服务器上弄乱了 60000 以检查最大值,但我会为了 FULLTEXT 搜索而发短信。通常它是 100 或 255 (

标签: mysql sql mysql-error-1064


【解决方案1】:

MAX 不支持此用途,它是为 MAX 功能保留的。请改用等效号码,请查看:Equivalent of varchar(max) in MySQL?

【讨论】:

    【解决方案2】:

    这对你有用。 MAX 是保留关键字。指定 varchar 的确切数量而不是最大值。但是,varchar(MAX) 将在 SQL SERVER 2005+ 中工作。

    CREATE TABLE IF NOT EXISTS users (
      uuid varchar(36) NOT NULL,
      json varchar(21808) NOT NULL,
      PRIMARY KEY (uuid)
    );
    

    FIDDLE

    【讨论】:

      【解决方案3】:

      MAX()是MySql中的一个函数,所以如果你想声明大小为最大值,请参考下面的例子。

      CREATE TABLE IF NOT EXISTS users (
      `uuid` varchar(36) NOT NULL,
      `json` varchar(65535) NOT NULL,
      PRIMARY KEY (`uuid`)
      );
      

      如果你计算出 21845*3 = 65535,那无论如何也行不通。
      而 21844*3 = 65532,确实有效。

      mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
      Query OK, 0 rows affected (0.32 sec)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多