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 中文乱码的更多相关文章
- java中文乱码解决之道(一)-----认识字符集
沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- java中文乱码解决之道(九)-----总结
乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- freemarker页面中文乱码
一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...
- tomcat项目中文乱码问题解决方法
在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...
- IE下get传中文乱码的问题 -- 解决方案 (js)
W3school 函数 JavaScript 全局对象 定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIs ...
- JSP和Servlet的中文乱码处理
JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...
- Git bash下中文乱码问题
Git bash下中文乱码--解决方案 解决办法1: 在git bash下,右键 出现下图,选择options: 选择"Text" 将Character set设置为 UTF-8 ...
随机推荐
- 四面快手、终拿Offer,想告诉你的一些事情
本篇面经来自于群里粉丝朋友的分享,希望对你有所帮助! 快手高开及以上职级面试 是没有笔试或者机试的,所以从第一轮开始就是直接面对面试官. 一轮 主要考察对Java基础的理解和深入程度. Spring ...
- 在IntelliJ IDEA中,Lombok注解@Slf4j找不到log解决方案
在IntelliJ IDEA中,注解@Slf4j找不到log时,可以安装Lombok插件 File → settings → Plugins, 然后点击"Browse repositorie ...
- 多线程十 Timer
定时/计算在java中主要使用的是Timer对象,他的内部依然是采用多线程方式进行处理 它有四个构造方法 方法名 作用 Timer() 空参 Timer(String name) 指定名字 Timer ...
- WM消息大全,windows消息大全
WM消息大全 消息名 消息值 说明 WM_CREATE 0x0001 应用程序创建一个窗口 WM_DESTROY 0x0002 一个窗口被销毁 WM_MOVE 0x0003 移动一个窗口 WM_SIZ ...
- ArcGIS Server10.4 service发布步骤
准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso 破解文件:Lic10.4.1.ecp #安装Server前, ...
- OpenCV:获取图像当中某一点的坐标
import numpy as np image=np.zeros((300,300,3),dtype='uint8') (cx,cy)=image.shape[1]//2,image.shape[0 ...
- ODA: After Apply ODA 12.2.1.2.0 Patch, Unable to Create TableSpace Due to [ORA-15001: diskgroup "DATA" does not exist or is not mounted | ORA-15040: diskgroup is incomplete] (Doc ID 2375553.1)
ODA: After Apply ODA 12.2.1.2.0 Patch, Unable to Create TableSpace Due to [ORA-15001: diskgroup &quo ...
- 【Https异常】This request has been blocked; the content must be served over HTTPS
一.问题出现场景 项目从http升级到https后,jsp页面存在发送http请求的情况下就会出现该异常.因为HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 ...
- python3 邮件方式发送测试报告
以邮件方式发送测试报告 import smtplib from email.mime.text import MIMEText class SendEmail: """邮 ...
- JVM-4-堆内存划分
什么是堆内存划分 Java虚拟机根据对象存活的周期不同,把堆内存划分为几块, 一般分为新生代.老年代和永久代,这就是JVM的内存分代策略.(JDK 1.8之后将最初的永久代取消了,由元空间 ...