【问题标题】:How can I fix dumped inserts starting with comma?如何修复以逗号开头的转储插入?
【发布时间】:2017-11-10 04:07:55
【问题描述】:

如何修复以逗号开头的转储插入?

就我而言,当我使用以下命令将数据库转储到文件时: mysqldump --databases test -u username --password=password > dump.sql

对于一些转储表,我得到以逗号而不是值开头的插入。我该如何解决?可能是什么原因?

mysqldump Ver 10.13 Distrib 5.7.20,适用于 Linux (x86_64)

mysql Ver 14.14 Distrib 5.7.20,适用于 Linux (x86_64),使用 EditLine 包装器

LOCK TABLES `exaple` WRITE;
/*!40000 ALTER TABLE `exaple` DISABLE KEYS */;
INSERT INTO `exaple` (`document`) VALUES (,'{\"id\": \"28d0cacd-76e5-4036-ac22-4db28c0495b0\"}')

总是在下一列是JSON类型的时候,表已经生成了列。

【问题讨论】:

  • 做一个字符串替换 (, to ( in dump.
  • 我不想编辑转储,我需要的是获得正确的输出而不是修复它。
  • 无论如何我已经找到了解决方案,如果在您的表模式中生成的列在文档列之前声明,就会发生这种情况

标签: mysql


【解决方案1】:

如果在您的表架构中生成的列在文档列之前声明,则会发生这种情况。将它们移到下方很简单。

之前

CREATE TABLE `example` (
  `id`        CHAR(36) GENERATED ALWAYS AS (document->>'$.id') STORED NOT NULL,
  `document`  JSON                                                    NOT NULL,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8
  COLLATE = utf8_bin;

之后

CREATE TABLE `example` (
  `document`  JSON                                                    NOT NULL,
  `id`        CHAR(36) GENERATED ALWAYS AS (document->>'$.id') STORED NOT NULL,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8
  COLLATE = utf8_bin;

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多