获取 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 类型支持不是很完善,更新到最新的驱动,就解决了这个乱码的问题。