---
title: "Latin1 字符集乱码问题 | OceanBase 文档中心"
description: Latin1 字符集乱码问题 背景信息 Latin1（正式名称为 ISO-8859-1）是一种 8 位字符编码标准，属于 ISO/IEC 8859 系列的一部分。Latin1 字符集的基本特性如下： 编码范围：0x00-0xFF（共 256 个字符）。 支持语言：西欧语言（包括英语、法语、德语、西班牙语、意大利语等）…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.2.11 社区版

# Latin1 字符集乱码问题

更新时间：2026-04-14 15:36:11

[编辑](https://github.com/oceanbase/oms-doc/edit/V4.2.11/zh-CN/1400.faq/500.data-migration-1/400.full-migration/400.latin1-character-set-garbled.md)  

## 背景信息

Latin1（正式名称为 ISO-8859-1）是一种 8 位字符编码标准，属于 ISO/IEC 8859 系列的一部分。Latin1 字符集的基本特性如下：

- 编码范围：0x00-0xFF（共 256 个字符）。
 - 支持语言：西欧语言（包括英语、法语、德语、西班牙语、意大利语等）。
 - ASCII 兼容：0x00-0x7F 和 ASCII 完全一致。

## Latin1 字符集出现乱码问题的原因

Latin1 字符集本身是字节编码，并不支持中文。因此迁移 Latin1 数据时，您需要知道 Latin1 中存储的是哪个字符集下的字节数组，通常是 UTF-8。使用 Latin1 字符集存储中文的操作如下：

1. 获取中文的 UTF-8 编码的字节数组。
 2. 将该数组存储在 Latin1 字符集定义的字段中。
 3. 将字符集转换为字节数组。
 4. 将字节数组按照 UTF-8 的编码规则进行转换，获取正确的中文数据。

## OMS 社区版解决方案

Source、Sink 新增两个两个参数 `latin1byte` 和 `names`，支持的数据源包括 MySQL、OceanBase 和 TiDB。

- `latin1byte` 用于设置 Latin1 的实际字符集。
 - `names` 用于设置是否在连接数据库时执行 `set names '字符集'`。

     - 默认使用程序中的自动设置。OceanBase 数据源无需设置，MySQL 数据源设置为 `utf8`。
     - 设置 `names="null"`。null 为字符串，表示不设置 `set names`。

      null 不设置 `set names` 的原因：当存在是 Latin1 字符集的字段时，如果设置 `set names`，即使使用 `getBytes` 也无法获取原始的 Latin1 字符集字节数组。
     - 其他正常字符集，设置 `set names 'names 具体设置的字符集'`。

### 读取数据

指定 Latin1 字符集实际存储的字符集，在读取时使用 `getBytes`，然后再使用 `new String(byte,"字符集")` 获取正确的字符串。

### 写入数据

请注意当源端和目标端的字段均是 Latin1 字符集时才生效。

- 全量迁移

  源端读取后会以 STRING 类型存储传递给 Sink 端，Sink 端获取 Latin1 实际字符集字节数组 `getBytes("latin1实际字符集")`，再使用 `setBytes` 写入目标端。
 - 增量同步

  增量同步组件消费 Store 数据，直接将消费到的 `bytes` 使用 `setBytes` 写入目标端。

## 数据迁移任务场景配置

下文不同类型数据迁移任务场景配置的前提是基于 Latin1 实际字符集为 uft8，即源端实际存储的是 uft8 字符集数据。您需要根据实际情况，结合《OMS 社区版解决方案》模块中对于 Source 和 Sink 的配置原理进行设置。

### MySQL -> OceanBase

- 全量迁移

  全部使用默认配置，数据迁移和数据校验均正常。
 - 增量同步

  默认配置乱码：您可以在 `Sink` 中添加 `latin1byte=utf8` 配置。
 - 反向增量

  默认配置乱码：您可以在 `Sink` 中添加 `latin1byte=utf8` 配置。

### OceanBase -> MySQL

- 全量迁移

  默认配置乱码：您可以在 `Source` 和 `Sink` 中分别添加 `latin1byte=utf8` 配置。
 - 增量同步

### TiDB -> OceanBase

- 全量迁移

     - 默认配置乱码：源端 TiDB 读取时，Latin1 字符集字段默认使用 `getBytes` 后再使用 `new String(bytes,utf8)`。您可以在 `Sink` 中添加 `latin1byte=utf8` 配置解决乱码问题。
     - 默认配置全量校验不一致：您可以添加配置 `task.sourceImageSection.latin1byte=utf8`。
 - 增量同步

### OceanBase -> OceanBase

- 全量迁移

## 旁路导入

目前旁路导入不支持写入 Latin1 字符集的数据，会报异常问题。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
