【发布时间】:2021-06-16 19:11:06
【问题描述】:
我正在将数据库从 MySQL 移动到 MariaDB,并测试导出/导入。一个一致出现的问题是当表具有虚拟列时。 MySQL 中的 SHOW CREATE TABLE 返回:
CREATE TABLE `table1` (
`colA` varchar(50) NOT NULL,
`colB' varchar(50) NOT NULL,
'vir1` GENERATED ALWAYS AS (concat_ws(' ', `colA`, `colB`)) VIRTUAL NOT NULL,
`colC` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后MariaDB在导入的时候报错:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOT NULL,
`colC` varchar(50) DEFAULT NULL
问题似乎出在虚拟列定义的“VIRTUAL NOT NULL”部分。如果我手动编辑导入 sql 文件,到此:
CREATE TABLE `table1` (
`colA` varchar(50) NOT NULL,
`colB' varchar(50) NOT NULL,
'vir1` GENERATED ALWAYS AS (concat_ws(' ', `colA`, `colB`)) VIRTUAL,
`colC` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后它导入就好了,所以我猜 MariaDB 不喜欢被告知虚拟字段是否允许为空(这似乎合乎逻辑,因为它不知道输入是否为空),但是导出的 MySQL 文件总是具有 VIRTUAL NULL 或 VIRTUAL NOT NULL 作为导出表定义的一部分。
有没有办法避免这种情况?我可以通过 grep 导出的文件来 s&r 这些定义,但这似乎很麻烦,如果这是与已知解决方案的兼容性问题,那么以后可能会遇到其他问题。
【问题讨论】: