我知道此问题之前已被多次询问过,但我真的很难将这些问题应用于这个问题。
我正在使用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),两者都没有运气。
非常感谢任何帮助。
答案 0 :(得分:2)
您的问题在
...
CONSTRAINT `oldimage_oi_name_fkey_cascaded`
FOREIGN KEY (`oi_name`)
REFERENCES `postgres`.`image` (`img_name`)
...
不支持外键列上的索引前缀。这样做的一个结果是BLOB和TEXT列不能包含在外键中,因为这些列上的索引必须始终包含前缀长度。