
MySQL客户端显示binary字符代码改造
• 一、客户端显示字符背景介绍
• 二、代码跟踪
• 三、代码改造
• 四、总结
一、客户端显示字符背景介绍
MySQL最新版本有一个新功能,在使用客户端的时候,最后加上--skip-binary-as-hex选项可以直接显示二进制值对应的字符串,不加该选项就可以按照原来的设置格式显示。先来看一下以下的varbaniry的显示例子。
如果不加--skip-binary-as-hex选项的显示如下:
这个功能对于用惯了旧版本的同学们有的会觉得不方便,今天这里动手改造一下都显示成字符格式而不用通过--skip-binary-as-hex选项设置。
二、代码跟踪
沿用上面的表查询一下哪段代码决定字符的显示格式,代码解析如下:
输入该命令后找到相关字符显示的代码:
class Item_field的成员函数如下:
继续找到class Field的成员函数如下:
输入以上命令GDB跟踪一下代码堆栈:
对于非表字段的内容显示格式取决于什么呢?继续找:
输入该命令后找到相关字符显示的代码,对于非表字段的内容取决于结果是否STRING_RESULT,'abcd'属于Item_string,result_type()=STRING_RESULT,所以显示字符格式是collation.collation。
class Item的成员函数如下:
三、代码改造
针对上面介绍的第一种情况改造代码如下:
登录客户端,可以看到结果已经自动显示成字符格式而不是刚才看到的baniry格式。
四、总结
MySQL客户端字符显示依赖charset_for_protocol()函数,可以根据自己的需求修改该函数的显示方式,方便自己的使用。如果未来新定义Item或者Field记得也要相应修改该函数来正确显示数据。
Enjoy GreatSQL :)
文章转载自公众号:GreatSQL社区
