MySqlBulkLoader 中文乱码
Posted lonelyxmas
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySqlBulkLoader 中文乱码相关的知识,希望对你有一定的参考价值。
原文:MySqlBulkLoader 中文乱码mysql驱动:MySqlConnector
GitHub地址:https://github.com/mysql-net/MySqlConnector.git
文档地址:https://mysql-net.github.io/MySqlConnector/
代码插入之后发现出现中文乱码现象。
原来的代码逻辑简略版
实现逻辑梳理,将数组写入csv,通过MySqlBulkLoader批量插入
public async Task BulkLoadLocalCsvFile<T>(IEnumerable<T> dataSource, string tableName)
using (var connection = new MySqlConnection(GetLocalConnectionString()))
await connection.OpenAsync();
var path = Path.GetTempFileName();
MySqlBulkLoader bl = new MySqlBulkLoader(connection);
bl.FileName = path;
bl.TableName = tableName;
bl.FieldTerminator = ",";
bl.FieldQuotationCharacter = '"';
bl.FieldQuotationOptional = true;
bl.Local = true;
using (var writer = new StreamWriter(path))
var configuration = new Configuration
HasHeaderRecord = false,
;
using (var csv = new CsvWriter(writer, configuration))
csv.WriteRecords(dataSource);
var writerConfiguration = csv.Context.WriterConfiguration;
var map = writerConfiguration.Maps.Find<T>();
foreach (var memberMap in map.MemberMaps)
var memberName = memberMap.Data.Member.Name;
loader.Columns.Add(memberName);
int rowCount = await bl.LoadAsync();
File.Delete(path);
分析乱码原因
- 需要指定csv文件的字符集
- 需要指定StreamWriter字符集
- 需要指定MySqlBulkLoader字符集
指定csv文件的字符集
写CSV文件借助的是开源包CsvHelper。
CsvHelper
- GitHub地址:https://github.com/JoshClose/CsvHelper
- nuget地址:https://www.nuget.org/packages/CsvHelper/12.1.2
指定 CsvHelper.Configuration.Configuration
字符集
var configuration = new Configuration
Encoding = Encoding.UTF8
;
没能解决。
指定StreamWriter字符集
var writer = new StreamWriter(path, true, Encoding.UTF8)
不行。
指定MySqlBulkLoader字符集
bl.CharacterSet = "UTF8";
乱码解决。
以上是关于MySqlBulkLoader 中文乱码的主要内容,如果未能解决你的问题,请参考以下文章