更新时间:2024-11-26 gmt 08:00
mysql或mariadb不同版本之间的语法差异-九游平台
对于源数据库和目标数据库的版本有差异的迁移和同步链路,由于不同版本之间的部分特性差异,可能会出现语法兼容性问题。
drs接收到的源数据库binlog日志中里保存的是原始的执行sql语句,这些sql语句将会直接在目标数据库中执行,如果目标数据库对于源数据库中执行sql中有不支持的语法约束,那么drs任务将会报错并失败。
例如以下几种源数据库和目标数据库的语法不兼容的场景(非全部场景):
- 源数据库mysql 5.7.34版本中执行create table t1 (id int, c1 varchar(16), fulltext index (c1 asc)) engine = innodb创建表结构的ddl,该ddl在源数据库binlog保存的为以上原生sql,增量过程中在目标数据库mysql 8.0.27版本中执行会报错,错误信息为“1221 - incorrect usage of spatial/fulltext/hash index and explicit index order”, 错误原因为目标数据库mysql 8.0.27版本不支持在全文索引上加排序语法规则。
- 源数据库mariadb 10.5.8版本执行create table t1(id int, c1 varchar(32)) engine = innodb default charset = utf8mb4 collate = utf8mb4_nopad_bin创建表结构的ddl,该ddl在源数据库binlog保存的为以上原生sql,增量过程中在目标数据库mysql 8.0.27版本中执行会报错,错误信息为“1273 - unknown collation: 'utf8mb4_nopad_bin'”,错误原因为目标数据库mysql 8.0.27版本不支持utf8mb4_nopad_bin排序字符集。
- 源数据库mariadb 10.5.8版本执行 create table t1(c1 int, c2 varchar(32) not null default uuid()) engine = innodb创建表结构的ddl,该ddl在源数据库binlog保存的为以上原生sql,增量过程中在目标数据库mysql 8.0.27版本中执行会报错,错误信息为“1064 - 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 uuid()”,错误原因为目标数据库mysql 8.0.27版本不支持默认值为uuid()函数。
- 源数据库mariadb 10.5.8版本执行 create table t1(c1 int, c2 inet6) engine = innodb 创建表结构的ddl,该ddl在源数据库binlog保存的为以上原生sql,增量过程中在目标数据库mysql 8.0.27版本中执行会报错,错误信息为“1064 - 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 inet6”,错误原因为目标数据库mysql 8.0.27版本不支持inet6类型。
父主题:
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨