

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 字符替换任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.CharacterSubstitution"></a>

您可以指定您的复制任务在目标数据库上对`WSTRING`数据类型为 AWS DMS `STRING`或的所有源数据库列执行字符替换。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

您可以为具有来自以下源和目标数据库的终端节点的任意任务配置字符替换：
+ 源数据库：
  + Oracle
  + Microsoft SQL Server
  + MySQL
  + MariaDB
  + PostgreSQL
  + SAP Adaptive Server Enterprise（ASE）
  + IBM Db2 LUW
+ 目标数据库：
  + Oracle
  + Microsoft SQL Server
  + MySQL
  + MariaDB
  + PostgreSQL
  + SAP Adaptive Server Enterprise（ASE）
  + Amazon Redshift

您可以在任务设置中使用 `CharacterSetSettings` 参数指定字符替换。这些字符替换发生在使用 Unicode 码位值（采用十六进制表示法）指定的字符处。您可以分两个阶段实施替换，在指定了这两个阶段时需按以下顺序进行：

1. **单个字符替换**- AWS DMS 可以将源上所选字符的值替换为目标上相应字符的指定替换值。使用 `CharacterSetSettings` 中的 `CharacterReplacements` 数组，选择具有您指定的 Unicode 码位的所有源字符。使用此数组还可以指定目标上对应字符的替换码位。

   要选择源上具有指定码位的所有字符，请将 `CharacterReplacements` 数组中 `SourceCharacterCodePoint` 的实例设置为该码位。然后通过在此数组中设置 `TargetCharacterCodePoint` 的对应实例，指定所有等同目标字符的替换码位。要删除目标字符而不是替换它们，请将 `TargetCharacterCodePoint` 的对应实例设置为零 (0)。您可以通过在 `CharacterReplacements` 数组中指定额外的 `SourceCharacterCodePoint` 和 `TargetCharacterCodePoint` 对，替换或删除所需任意数量的不同目标字符值。如果您为 `SourceCharacterCodePoint` 的多个实例指定了相同值，则 `TargetCharacterCodePoint` 的上一个对应设置的值应用到目标。

   例如，假设您为 `CharacterReplacements` 指定以下值。

   ```
   "CharacterSetSettings": {
       "CharacterReplacements": [ {
           "SourceCharacterCodePoint": 62,
           "TargetCharacterCodePoint": 61
           }, {
           "SourceCharacterCodePoint": 42,
           "TargetCharacterCodePoint": 41
           }
       ]
   }
   ```

   在此示例中， AWS DMS 将目标上源代码点十六进制值 62 的所有字符替换为代码点值 61 的字符。此外， AWS DMS 将目标上源代码点 42 的所有字符替换为代码点值 41 的字符。换而言之， AWS DMS 在目标上将字母 `'b'` 的所有实例替换为字母 `'a'`。同样， AWS DMS 用字母替换目标`'B'`上字母的所有实例`'A'`。

1. **字符集验证和替换**-完成任何单个字符替换后， AWS DMS 可以确保所有目标字符在您指定的单个字符集中都有有效的 Unicode 代码点。您可使用 `CharacterSetSettings` 中的 `CharacterSetSupport` 来配置此目标字符验证和修改。要指定验证字符集，请将 `CharacterSetSupport` 中的 `CharacterSet` 设置为字符集字符串值。（`CharacterSet` 的可能值见下文。） 您可以通过以下方式之一 AWS DMS 修改无效的目标字符：
   + 为所有无效目标字符指定单个替换 Unicode 码位，不论其当前码位如何。要配置此替换码位，请将 `CharacterSetSupport` 中的 `ReplaceWithCharacterCodePoint` 设置为指定值。
   + 通过将 `ReplaceWithCharacterCodePoint` 设置为零 (0) 配置删除所有无效目标字符。

   例如，假设您为 `CharacterSetSupport` 指定以下值。

   ```
   "CharacterSetSettings": {
       "CharacterSetSupport": {
           "CharacterSet": "UTF16_PlatformEndian",
           "ReplaceWithCharacterCodePoint": 0
       }
   }
   ```

   在此示例中， AWS DMS 删除目标上发现的字符集中无效的所有`"UTF16_PlatformEndian"`字符。因此，将删除使用十六进制值 `2FB6` 指定的任意字符。此值无效，因为这是一个 4 字节的 Unicode 码点，并且 UTF16 字符集仅接受带有 2 字节码点的字符。

**注意**  
复制任务在启动您通过表映射指定的任意全局或表级别转换之前，完成所有指定的字符替换。有关表映射的更多信息，请参阅[使用表映射指定任务设置](CHAP_Tasks.CustomizingTasks.TableMapping.md)。  
字符替换不支持 LOB 数据类型。这包括 DMS 认为是 LOB 数据类型的任何数据类型。例如，Oracle 中的 `Extended` 数据类型被视为 LOB。有关源数据类型的更多信息，请参阅下面的 [Oracle 的源数据类型](CHAP_Source.Oracle.md#CHAP_Source.Oracle.DataTypes)。

 AWS DMS 支持的值`CharacterSet`显示在下表中。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.CharacterSubstitution.html)