注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Mysql关系型数据转换成json格式的udf工具lib_mysqludf_json  

2016-11-05 17:10:06|  分类: Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
把MySQL里的数据格式转成json格式,我们通常使用PHP的json扩展实现。但如果直接使用udf,其实会有更快的速度。之前的文章也有提及过,《MySQL查询结果直接输出JSON或XML格式》,但那也只是粗浅的应用下,而lib_mysqludf_json则提供更多功能:
1.可变长度的参数列表允许直接映射
2.自动转义适应json语法
3.NULL处理【字符串null映射到JavaScript null,数字null映射到Java NaN】
4.表达式自动映射成json对象成员
5.json成员名称基本的有效性检查
6.支持json嵌套
lib_mysqludf_json库提供函数有:
json_array
json_members
json_object
json_values
好了,相关的介绍就说完了,但最后还需要提及一点,这个工具目前只有linux版本,好象对window平台并不挡支持。
在安装这个工具之前,请先确定安装好了libmysqld-dev和libmysqlclient-dev,不然,会报找不到mysql_config文件错误。
官网的地址是:https://github.com/mysqludf/lib_mysqludf_json
1)请先查找当前Mysql的plugin目录,使用如下语句:

show variables like '%plugin%';

2)下载相关的包并编译及配置:

# wget https://github.com/mysqludf/lib_mysqludf_json/archive/master.zip
# unzip master.zip
# cd lib_mysqludf_json-master
# mv lib_mysqludf_json.so lib_mysqludf_json.so_bak
# gcc $(/usr/bin/mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
# cp lib_mysqludf_json.so /usr/lib/mysql/plugin/
# mysql -u root -p -h 127.0.0.1
mysql> CREATE FUNCTION json_array RETURNS STRING SONAME 'lib_mysqludf_json.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION json_members RETURNS STRING SONAME 'lib_mysqludf_json.so';

Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION json_values RETURNS STRING SONAME 'lib_mysqludf_json.so';
Query OK, 0 rows affected (0.00 sec)

其实这个lib_mysqludf_json.so文件包中已经存在,但是为了安全起见,还是自己编译一下生成。
想要确认下,是否已经成功,可以选择如下语句执行进行察看。

select * from mysql.func;

3)使用的话,也非常简单,比如原来的输出多个字段语句如下:

select Host,User from mysql.user;

改写成如下即可。

select json_array(Host,User) as json from mysql.user;

这里的json_array可以替换成json_members,json_object,json_values,虽然转换结果都是json,但最终的结果看名字就能大体明白。
最终还是要说下,如果不编译lib_mysqludf_json.so,而是直接使用压缩包中lib_mysqludf_json.so的话,可能会有些服务器会不停重启mysql或直接报错。
  评论这张
 
阅读(17)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017