4.1.26复制和保留字

当您试图从一个较旧的源复制到一个较新的副本时,您可能会遇到问题,并且您使用了源上的标识符,这些标识符在副本上运行的较新的MySQL版本中是保留字。例如,表列名为排名在MySQL 5.7源上复制到MySQL 8.0副本可能会导致问题,因为排名是一个从MySQL 8.0开始的保留字。

在这种情况下,复制可能会失败,出现错误1064你的SQL语法有错误…即使使用保留字命名的数据库或表,或者具有使用保留字命名的列的表,也不能进行复制.这是因为每个SQL事件在执行之前都必须由副本解析,以便副本知道哪个或哪些数据库对象将受到影响。只有在事件被解析之后,副本才能应用由——replicate-do-db——replicate-do-table——replicate-ignore-db,——replicate-ignore-table

为了解决源上的数据库名、表名或列名被副本视为保留字的问题,可以执行以下操作之一:

  • 使用一个或多个ALTER TABLE语句来更改任何数据库对象的名称(这些名称在副本上将被视为保留字),并将任何使用旧名称的SQL语句改为使用新名称。

  • 在使用这些数据库对象名称的任何SQL语句中,使用反勾号字符将名称作为带引号的标识符写入().

MySQL版本的保留字列表,请参见MySQL 8.0中的关键字和保留字,在MySQL服务器版本参考.有关标识符引用规则,请参见模式对象名称