mysql json 中文_Dapper操作MySQL数据库获取JSON数据中文乱码

本文记录了在使用Dapper操作MySQL数据库,遇到JSON数据中文乱码的问题及解决方案。问题源于使用`MySql.Data`驱动,当JSON列类型为json时,查询中文出现乱码。通过URL编码存储,解码查询可以避免该问题。更换为`Pomelo.EntityFrameworkCore.MySql`驱动则能正常处理中文。
摘要由CSDN通过智能技术生成

原标题:Dapper操作MySQL数据库获取JSON数据中文乱码

在项目中利用Dapper将JSON数据存储到MySQL数据库,结果发现JSON数据中的中文乱码,特此记录,希望对存储JSON的童鞋能有所帮助,文中若有错误之处,还望批评指正。

为了引出最终问题出在什么地方,我们重头开始进行讲解,首先我们给出如下测试实体以及在数据库中的表,如下:

2ef2f6d1411cf0cd22445ba6da8286d3.png

为了数据操作方便,我们通过包【Dapper.SimpleCRUD】来操作,插入数据和查询数据如下:

dd47dbec3bd5fc358f7359430d4c5a63.png

ce2af5ab681e195fbbc7041a9dff0c29.png

如上一切正常,接下来我们将存储JSON数据的列类型修改为json,然后再来进行如上操作,结果会发现获取数据中文将乱码:

0f372fc7dbbb88d235950c4a13c91d53.png

3b0c4920e7c75bd127f39c0ba0d67a25.png

刚开始我猜想难道用的包【Dapper.SimpleCRUD】在映射时出了问题,于是我用Dapper进行如下查询,依然会出现如上中文乱码:

179205f2f79b86817420d14df84094a7.png

所以由上基本可以得出结论:针对MySQL中的类型json,若json数据中存在中文,则利用Dapper查询时将出现乱码。 那么如何解决这个问题呢?于是乎,在添加数据时,我将中文进行URL编码,再查询时进行解码即可,如下:

5320539155d35c8010b3e6ea14e04ffc.png

a26387f35a683cc68d5f22e2ee9b49cf.png

当然,上述解决方案以实际项目业务而去解决,我们项目需要获取到JSON数据中的中文然后通过URL传输,免去请求接口再去获取所存储的名称。到此我们了解了Dapper针对json数据类型将导致查询中文乱码的问题,但是其根本原因是什么呢?上述连接MySQL的驱动,是使用Oracle官方所提供的驱动且为最新版本,如下:

我们知道通过EF Core操作MySQL数据库,若是利用官方包有一堆问题存在,所以大多都是采用的包【Pomelo.EntityFrameworkCore.MySql】,因为里面包含【MySqlConnector】,换句话说也就存在MySQL的驱动连接,所以这里我们尝试利用该包替换上述【MySql.Data】包,结果发现中文不再乱码。

综上所述,我们需要注意的是若利用官方驱动包【MySql.Data】,当配置MySQL中的列类型为json时,若json数据中存在中文,则利用Dapper查询时将会出现中文乱码,需要进行转换。上述在数据库连接字符串中我们设置为utf8mb4,所以理论上应该和编码没有任何关系。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值