获取 MySQL 5.7 json 类型字段中文乱码

原创 mysql

MySQL 5.7 支持 json 类型的存储字段,在存储关联信息的时候很方便,所以就用了一下。

但是在查询的时候出现了乱码的问题,查看了一下数据的存储编码,都是 UTF-8 的,代码文件的编码也是 UTF-8,所以很奇怪为什么还会乱码。

经过一番查阅,有两种方式可以解决。

SQL

select json_extract(json_text, '$') result from product

json_extract 是 MySQL 新增的函数,可以直接对存储的 JSON 对象操作。

第一个参数 json_text 为表 product 的字段,result 为查询结果的别名。json_extract 的第二个参数可以对 JSON 对象进行操作,$ 符号代表 JSON 对象。

比如我们存储的 JSON 数据为 JSON Array 数组的方式:["java", "cpp"],那么 $ 将会返回整个数组对象,而使用数组下标的方式,可以返回数组指定索引位置的元素, 比如我们需要返回 java 字符串:

select json_extract(json_text, '$[0]') result from product

对于 JSON Object 的存储,可以使用 . 操作符来获取元素:

-- {"name": "sid lau", "website": "www.daimafans.com"}
select json_extract(json_text, '$.name') result from product
-- 返回 sid lau 字符串

数组和对象可以混合连写。

更新驱动文件

上面的方式虽然可以解决问题,但是还是比较麻烦的。我们可以通过更新到最新的驱动文件来彻底解决这个问题。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

我的驱动文件一直没有更新过,比较老,对最新的 json 类型支持不是很完善,更新到最新的驱动,就解决了这个乱码的问题。

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论