如何将SQLite数据导入MySQL,解决波斯语数据导入后显示为问号的问题
解决SQLite波斯语数据导入MySQL显示为问号的问题
这个问题的核心是全链路字符集不统一,你需要按以下步骤逐一配置,全程使用utf8mb4字符集(MySQL自带的utf8为阉割版,仅支持3字节字符,无法完整覆盖波斯语等非拉丁字符,请勿使用):
1. 配置MySQL端字符集
- 数据库级别设置:
新建库时指定字符集:CREATE DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;
已创建的库修改字符集:ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci; - 表级别设置:
存储波斯语的表统一转换字符集:ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci; - 字段级别设置:
仅部分字段存储波斯语时可单独修改,示例:ALTER TABLE 你的表名 MODIFY COLUMN 字段名 字段类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci; - 全局验证:
执行SHOW VARIABLES LIKE 'char%';检查当前会话字符集,确保character_set_client、character_set_connection、character_set_results均为utf8mb4,临时修改可执行SET NAMES utf8mb4;;永久修改需编辑MySQL配置文件(Linux为my.cnf,Windows为my.ini):[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_persian_ci
[client]
default-character-set = utf8mb4
配置修改后重启MySQL服务生效。
2. 确保SQLite导出的CSV文件编码正确
SQLite默认使用UTF-8存储数据,导出CSV时必须明确指定编码为UTF-8(优先选择UTF-8无BOM格式),导出后可直接用文本编辑器打开CSV,确认波斯语内容显示正常无乱码再进行导入操作。
3. CSV导入时指定字符集
- 用
LOAD DATA命令导入的示例:LOAD DATA INFILE '/本地路径/你的数据文件.csv' INTO TABLE 你的表名 CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; - 用Navicat、DBeaver等图形化工具导入时,需在导入向导的编码选择项中明确选择
UTF-8,不要使用系统默认编码。
4. 直接执行SQL插入的场景处理
- 执行插入语句前,先在当前数据库会话执行
SET NAMES utf8mb4;,确保连接字符集正确后再执行插入操作。 - 用Python、Java等脚本做数据迁移的场景,需要在创建数据库连接时明确指定编码为utf8mb4,比如Python的pymysql连接需添加参数
charset='utf8mb4'。
内容的提问来源于stack exchange,提问作者Alireza Ghanati
相关产品推荐
相关产品推荐

