/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

C#中特殊字符存入MySql报错“ERROR 1366: Incorrect string value“

2017-06-26 十有三 0 浏览:1449 .NET技术 C# | MySql

在开发某个.NET项目的过程中,遇到了UTF-8编码的特殊字符在插入到GBK编码的MySql数据库时,引发了这样的错误:ERROR 1366: Incorrect string value: '\xE2\x80\xA2\xE7\x8A\xB6...' for column 'title' at row 2。

由于我对MySql也不熟,鼓捣了一阵才解决。这个问题还是比较常见的,根据我自身的情况,关键的地方或者说引发异常的条件是这几个:

  1. UTF-8编码的特殊字符
  2. MySql采用的是GBK编码,特别要留意数据库/表/字段这三个不同级别的字符集编码
  3. 在1和2条件满足的情况下,将数据insert或update到数据库中。

问题最根本的原因在于某些UTF-8编码的特殊字符对于GBK来说是无法识别的,如果在C#中强行转换会变成“?”问号之类的奇怪符号,所以这部分数据在添加到MySql的时候引发了Incorrect string value。

解决方法一:从代码入手,处理问题数据,删除特殊符号

这种方法不用对数据库做任何操作,可以保留数据库原本的GBK编码格式,只要在问题数据要添加或修改进数据库之前进行操作,通过正则表达式将所有GBK不支持的UTF8符号替换掉!

另外还有一个思路就是强行转换编码,不过就如上面所说,强行转换这部分字符会变成问号或其他一些奇怪的符号。我当时试了下没有成功,数据插入到MySql依然报错,所以还是采用删除的方法。

具体代码如下,代码在控制台程序中运行(案例代码中就有两个特殊符号):

string content = "测•试�字符";
Console.WriteLine(content);

var regex = new Regex(@"[^\u4E00-\u9FA5\u3000-\u303F\uFF00-\uFFEF\u0000-\u007F\u201c-\u201d]", RegexOptions.Multiline | RegexOptions.ExplicitCapture);
content = regex.Replace(content, "");
//content=content.Replace("�", "").Replace("•", "");

Console.WriteLine(content);
Console.ReadKey();

备注:代码也可以从github上查看,最后执行结果如下图。

代码执行结果

上面代码中的正则是我在网上找到的,对于我遇到的问题来说是足够用了,已经包含了很多UTF8的特殊字符。如果有遗漏,还可以用土一点的办法,用Replace替换掉特殊符号。

解决方法二:从数据库入手,统一编码设置

主要就是将MySql的库/表/字段编码都设置成utf8,这样就能包容要添加的特殊字符了。

这个方法局限性比较大,毕竟有时候数据库是没办法随意更改的。另外在MySql中,除了utf8外,还有utf8mb4这种格式的编码,网上有篇遇到emoji表情存入数据库引发Incorrect string value异常的文章,主要就是这两种编码引发的问题,可以参考下。


版权声明:本文由十有三创作,采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请务必署名-保留作者名称及出处:https://shiyousan.com/post/636340896985738820。


  • 上一篇: WIN10 添加美式键盘并设置为默认输入法
  • 下一篇: Win10更新后右键开始菜单的控制面板不见了

相关文章
  • 如何在ASP.NET的web.config配置文件中添加MIME类型
  • AntiForgeryToken生成过程解析-ASP.NET MVC防伪标记源码学习[上]
  • ASP.NET MVC 动态返回指定的HTTP状态码
  • C#如何根据输入的行数打印出由*星号组成的三角形
  • C# List<string>如何根据分隔符合并成字符串?
  • ASP.NET MVC如何实现带www域名重定向到不带www顶级域名
发表评论
记住昵称

文章分类

.NET技术 122 数据库 24 Web前端 21 网站建设运维 33 操作系统与应用 67 程序猿日常 11 开发工具 11 其他随笔 12

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 道学 佛经 服务器 搞笑娱乐 好文分享 软件应用 生活知识 诗词 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • 解决IE11安装升级失败和在安装前需要更新的问题
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • jquery ajax error函数和及其参数详细说明
  • 骑马与砍杀 无限箭枝/作弊修改箭枝数量/调整各种箭枝数量的方法
  • 在唯一密钥属性“fileExtension”设置为“.”时,无法添加类型为“mimeMap”的重复集合项

推荐文章

  • Windows XP系统快速启动栏的"显示桌面"图标丢失不见的解决方法
  • Visual Studio 2017 如何打开Model Browser(实体数据模型浏览器)
  • 网站使用plesk面板,页面出现default parallesls plesk page的解决方法
  • 修改Discuz!NT源码出现'List' is an ambiguous reference(即不明确的引用)错误
  • 游戏运行出现Failed to Initialize PhysX Hardware Acceleration

最新评论

  • 感谢脖主分享
  • 在“为click once清单签名”的右侧,可以创
  • 用的帝国cms,修改后无效啊。 缓存清理了,浏览
  • 我的需求是:分享出去是同一个网站,但是微信分享需要
  • 试了 的确 有效,只能用english的语言进行安

友情链接

  • Wil的博客
  • Passingwind的博客
  • 坤哥网
  • .NET开发者社区

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号