MySqlBulkLoader 中文乱码
2024-09-03 12:48:44
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";
乱码解决。
最新文章
- 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法
- IOS远程推送
- 如何使用Math对象快速计算数组中的最大值或最小值
- 这些年正Android - 母亲
- post请求报文
- class.equals
- datawindow 创建操作报表。
- Learning c section 1
- Embedded Database service fails to start after installing or migrating to Symantec Endpoint Protection (SEP) 12.1.5 (RU5)
- Ext.grid.plugin.RowExpander的简单用法
- Dom操作的分类
- 不用Unity库,自己实现.NET轻量级依赖注入
- if语句写在while语句外面效率更高
- android开发之路01
- struts2错误验证
- .NET Core项目从xproj+project.json向csproj迁移简介
- pyqt5 动画学习(三) 指定控件的移动轨迹
- 8.Vue基础
- Tesseract 模块
- 玩转X-CTR100 l STM32 l STM32F4 l 蓝牙串口通信
热门文章
- C++入门到理解阶段二基础篇(9)——C++结构体
- 如何使用1行代码让你的C++程序控制台输出彩色log信息
- NFS文件系统及搭建NFS共享服务
- VUE Base64编码图片展示与转换图片
- 通过修改VAD属性破除锁页机制
- Xcode 中配置 clang-format 格式化 C++ 代码
- python爬虫网页解析之lxml模块
- Reuse Implemented Functionality 重用实现功能
- css知识笔记:垂直居中(别只看,请实操!!!)
- 从华为“鸿蒙”备胎看IT项目建设