MySQL 8.0参考手册
MySQL 8.0版本说明
当您试图从一个较旧的源复制到一个较新的副本时,您可能会遇到问题,并且您使用了源上的标识符,这些标识符在副本上运行的较新的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服务器版本参考.有关标识符引用规则,请参见模式对象名称.