【问题标题】:MySQL error: 1064 while importing a databaseMySQL 错误:导入数据库时​​出现 1064
【发布时间】:2015-09-09 09:36:33
【问题描述】:

我已经从 MySQL 5.5.40 版本导出了一个数据库,但是当我将它导入 MySQL 5.5.44 时,我收到了关于语法的错误。

CREATE TABLE IF NOT EXISTS `key_value` (
  `collection` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.'
`value` longblob NOT NULL COMMENT 'The value.',
  PRIMARY KEY (`collection`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Generic key-value storage table. See the state system for…';

收到的错误是:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`value` longblob NOT NULL COMMENT 'The value.',
  PRIMARY KEY (`collection`,`nam' at line 3

请提出建议。

【问题讨论】:

  • 你在值 longblob 之前错过了逗号 ',' ...

标签: mysql import export


【解决方案1】:

this comment in the drupal.org issue queue 的解决方案是这样的:

改变这个:

CREATE TABLE ``key_value`` ( ``collection`` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.' ``value`` longblob NOT NULL COMMENT 'The value.', PRIMARY KEY (``collection``,``name``) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Generic key-value storage table. See the state system for…'

到这里:

CREATE TABLE ``key_value`` ( ``collection`` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.', ``name`` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.', ``value`` longblob NOT NULL COMMENT 'The value.', PRIMARY KEY (``collection``,``name``) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Generic key-value storage table. See the state system for';

然后在接近尾声时删除它以防止另一个错误:

ALTER TABLE ``key_value`` ADD ``name`` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.';

【讨论】:

    【解决方案2】:

    您的表中没有 name 列,但您正在使用 PRIMARY KEY (collection,name) 的组合创建主键。所以只需删除名称并尝试。

    按照 Khalid 的建议,在集合列之后和值列之前添加“,”。

    终于可以使用了-

    CREATE TABLE IF NOT EXISTS `key_value` (
      `collection` VARCHAR(128) CHARACTER SET ASCII NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.',
    `value` LONGBLOB NOT NULL COMMENT 'The value.',
      PRIMARY KEY (`collection`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='Generic key-value storage table. See the state system for…';
    

    【讨论】:

    • 我已经导出了一个现有的,更准确地说是 Drupal 8 数据库,我不确定这怎么可能。
    • 可能是从备份文件中复制时发生的,您可以读取备份的 .sql 文件。它不应该是...
    • 添加到我的评论中,当我在编辑器中打开文件时,在此语句后面我发现 alter table 命令正在向同一个表添加一个“名称”字段。 ALTER TABLE key_value ADD name varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT '键值对的键。由于 KEY 是 SQL 保留关键字,因此选择了名称。';
    • 据我了解,备份文件中不应该有 2 条语句首先用于创建表,而 2 条用于改变备份文件...因为备份只会更新最终表的创建语句,然后是数据插入语句... .finally 我认为你有解决方案,所以享受...... :)
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2015-10-09
    • 2018-11-23
    • 2016-05-18
    • 2012-10-25
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多