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