#### 17.5.1.26 复制和保留字

[](<>)[](<>)

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

在这种情况下，复制可能会失败，并出现错误 1064 You have an error in your SQL syntax...,*即使使用保留字命名的数据库或表或具有使用保留字命名的列的表被排除在复制之外*.这是因为每个 SQL 事件必须在执行之前由副本解析，以便副本知道哪个或哪些数据库对象会受到影响。只有在事件被解析后，副本才能应用由定义的任何过滤规则[`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db),[`--replicate-do-table`](replication-options-replica.html#option_mysqld_replicate-do-table),[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)， 和[`--复制忽略表`](replication-options-replica.html#option_mysqld_replicate-ignore-table).

要解决源上的数据库、表或列名称会被副本视为保留字的问题，请执行以下操作之一：

-   使用一个或多个[`更改表`](alter-table.html)源上的语句更改任何数据库对象的名称，这些名称将被视为副本上的保留字，并更改使用旧名称的任何 SQL 语句以使用新名称。

-   在使用这些数据库对象名称的任何 SQL 语句中，使用反引号字符（\```）。

    有关 MySQL 版本的保留字列表，请参阅[MySQL 8.0 中的关键字和保留字](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html)， 在里面*MySQL 服务器版本参考*.有关标识符引用规则，请参阅[第 9.2 节，“架构对象名称”](identifiers.html).
