MariaDB CREATE TABLE SQL错误:1170

时间:2017-11-20 18:24:48

标签: mysql sql postgresql mariadb

我知道此问题之前已被多次询问过,但我真的很难将这些问题应用于这个问题。

我正在使用MySQL Workbench将数据库从Postgres迁移到MariaDB。

这是我遇到问题的表格

CREATE TABLE IF NOT EXISTS `postgres`.`oldimage` (
  `oi_name` LONGTEXT NOT NULL,
  `oi_archive_name` LONGTEXT NOT NULL,
  `oi_size` INT NOT NULL,
  `oi_width` INT NOT NULL,
  `oi_height` INT NOT NULL,
  `oi_bits` SMALLINT NULL,
  `oi_description` LONGTEXT NULL,
  `oi_user` INT NULL,
  `oi_user_text` LONGTEXT NOT NULL,
  `oi_timestamp` DATETIME NULL,
  `oi_metadata` LONGBLOB NOT NULL,
  `oi_media_type` LONGTEXT NULL,
  `oi_major_mime` LONGTEXT NULL,
  `oi_minor_mime` LONGTEXT NULL,
  `oi_deleted` SMALLINT NOT NULL DEFAULT 0,
  `oi_sha1` LONGTEXT NOT NULL DEFAULT '',
  INDEX `oi_name_archive_name` (`oi_name`(255) ASC, `oi_archive_name`(255) ASC),
  INDEX `oi_name_timestamp` (`oi_name`(255) ASC, `oi_timestamp` ASC),
  INDEX `oi_sha1` (`oi_sha1`(255) ASC),
  CONSTRAINT `oldimage_oi_name_fkey_cascaded`
    FOREIGN KEY (`oi_name`)
    REFERENCES `postgres`.`image` (`img_name`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `oldimage_oi_user_fkey`
    FOREIGN KEY (`oi_user`)
    REFERENCES `postgres`.`mwuser` (`user_id`)
    ON DELETE SET NULL
    ON UPDATE NO ACTION)  

我得到的错误是

BLOB/TEXT column 'oi_name' used in key specification without a key length
SQL Error: 1170  

我已尝试将oi_name设为PRIMARY KEY,我也尝试将其更改为VARCHAR(255),两者都没有运气。
非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您的问题在

...
CONSTRAINT `oldimage_oi_name_fkey_cascaded`
FOREIGN KEY (`oi_name`)
REFERENCES `postgres`.`image` (`img_name`)
...

来自Create foreign Key

  

不支持外键列上的索引前缀。这样做的一个结果是BLOB和TEXT列不能包含在外键中,因为这些列上的索引必须始终包含前缀长度。