范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

技术分享MySQL命令行一则诡异问题分享

  作者:杨涛涛
  资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
  本文来源:原创投稿
  *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。昨天一位网友的问题共享出来,以防大家入坑。
  这位网友对 MySQL 官方手册里的 hex 和 unhex 函数有些疑问: 自己实验结果和手册中给的结果有些差异。
  手册上是这样写的: mysql> SELECT X"616263", HEX("abc"), UNHEX(HEX("abc"));             -> "abc", 616263, "abc"  mysql> SELECT HEX(255), CONV(HEX(255),16,10);             -> "FF", 255
  完后自己实验结果反而这样: mysql>SELECT X"616263", HEX("abc"), UNHEX(HEX("abc")); +----------------------+------------+--------------------------------------+ | X"616263"            | HEX("abc") | UNHEX(HEX("abc"))                    | +----------------------+------------+--------------------------------------+ | 0x616263             | 616263     | 0x616263                             | +----------------------+------------+--------------------------------------+ 1 row in set (0.00 sec)  mysql>SELECT HEX(255), CONV(HEX(255),16,10); +----------+----------------------+ | HEX(255) | CONV(HEX(255),16,10) | +----------+----------------------+ | FF       | 255                  | +----------+----------------------+ 1 row in set (0.00 sec)
  第一条语句里 X"616263"  和*UNHEX(HEX("abc"))*的执行结果和手册不一致,第二条语句执行结果和手册完全一致。 要找到这个问题的原因,得先明白这几个函数的含义。hex 函数用来把字符串或者数字转换为十六进制; unhex 函数则相反; conv 函数用来在各种不同进制之间互转; X特殊字符用来表示十六进制的字符串(不区分大小写),也可以用0x(小写x,比如X"616263" 可写为0x616263)。
  我自己虚拟机上的实验:结果也不正确。 mysql:ytt:8.0.28>select X"616263",UNHEX(HEX("abc"));  +----------------------+--------------------------------------+ | X"616263"            | UNHEX(HEX("abc"))                    | +----------------------+--------------------------------------+ | 0x616263             | 0x616263                             | +----------------------+--------------------------------------+ 1 row in set (0.00 sec)
  我猜想:函数的执行结果肯定是对的(大厂不可能犯这样的低级错误,有错也是我自身的问题),但是此处进制没做正常转换,一定是客户端在结果转码上有哪些地方默认有变。为此查询 MySQL 命令行的 status 结果: mysql:(none):8.0.28>status --------------  mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL) ... UNIX socket:		/var/run/mysqld/mysqld.sock Binary data as:		Hexadecimal --------------
  上面包含一行:  Binary data as: Hexadecimal  这一行意思是说 MySQL 命令行把二进制字符打印为十六进制字符。
  到这里应该判断下这两个十六进制字符的编码:结果都为 binary 。 mysql:(none):8.0.28>select charset(X"616263"),charset(UNHEX(HEX("abc"))); +--------------------+----------------------------+ | charset(X"616263") | charset(UNHEX(HEX("abc"))) | +--------------------+----------------------------+ | binary             | binary                     | +--------------------+----------------------------+ 1 row in set (0.00 sec)
  既然编码为 binary ,直接用 convert 函数转码即可:转码后的结果正确。 mysql:(none):8.0.28>select convert(X"616263" using utf8mb4),convert(UNHEX(HEX("abc")) using utf8mb4); +----------------------------------+------------------------------------------+ | convert(X"616263" using utf8mb4) | convert(UNHEX(HEX("abc")) using utf8mb4) | +----------------------------------+------------------------------------------+ | abc                              | abc                                      | +----------------------------------+------------------------------------------+ 1 row in set (0.00 sec)
  到这里,问题是解释通了,不过能不能每次不进行转码而直接查呢? 当然可以。MySQL 命令行客户端有个选项( --binary-as-hex )用来控制是否打印二进制数据为十六进制,MySQL 命令行默认开启。   --binary-as-hex     Print binary data as hex. Enabled by default for                       interactive terminals.
  只需关闭这个选项即可, 写入配置文件(my.cnf里[mysql]段下)或者是命令行带入都可以:结果正确。 root@ytt-ubuntu:~# mysql --binary-as-hex=false ..  mysql:(none):8.0.28>select X"616263",UNHEX(HEX("abc")); +-----------+-------------------+ | X"616263" | UNHEX(HEX("abc")) | +-----------+-------------------+ | abc       | abc               | +-----------+-------------------+ 1 row in set (0.00 sec)
  还有一个通用选项:  --skip-binary-as-hex , 带上后效果一样。 root@ytt-ubuntu:~# mysql --skip-binary-as-hex ... mysql:(none):8.0.28>select X"616263",UNHEX(HEX("abc")); +-----------+-------------------+ | X"616263" | UNHEX(HEX("abc")) | +-----------+-------------------+ | abc       | abc               | +-----------+-------------------+ 1 row in set (0.00 sec)
  需要注意的是:这个选项也同时影响字段类型为 BLOB ,BINARY 等的表数据输出。

高颜值的真无线通话降噪蓝牙耳机南卡Lite开箱体验我爸一直觉得车载的蓝牙电话不好用,我就想着找一个适合开车打电话的蓝牙耳机送给他。于是我看上了南卡最近新出的南卡Lite真无线通话降噪蓝牙耳机。开箱南卡Lite这次的包装非常的轻奢,让你的GoPro摆脱续航焦虑泰迅GoPro配件推荐体验最近有朋友入手了一台GoProHERO9,他问我有没有什么配件推荐,我思考了一下,把最近入手的泰迅GoProHERO9配件推荐给了他。对于相机来说,我个人觉得最重要的配件就是电池,有快充显示的移动电源?ORICO奥睿科移动电源初体验之前有个20000mAh的移动电源被女朋友友善地拿走了,我能怎么办,只好再买一个呗,真卑微。ORICO是一家专业做各种手机电脑配件的厂商,其中有款充电宝一共有黑白两个配色,2000我的第一款全能不粘锅帝伯朗灵感系列不粘锅分享锅,一个家庭里必不可少的一部分。但是锅的种类实在是太多了,炒锅汤锅蒸锅煎锅烤肉锅炸锅焖锅微压锅等等,这么多种锅不说买齐要多少钱,在家放哪里都是个问题。基于对全能锅的需要,我找呀找,Airpods的最佳平替?唐麦W9上手体验最近有小伙伴问我,有没有价格便宜一点的AirPods的平替耳机,因为预算不多,希望能有一款性价比高一点的。我看着桌上一摞的无线耳机,陷入了沉思。许久之后,我慢慢拿起了前几日刚买的唐摆脱手机去运动南卡RunnerPro开箱体验之前的南卡骨传导RunnerCC被朋友拿走了,最近看到南卡新出的骨传导RunnerPro,看到新品的新功能自带内存,我为了更好的运动毫不犹豫的就入手了。开箱南卡RunnerPro外入门级麦克风泰迅领夹式麦克风初体验作为一名视频小白,不对,是一名准备步入视频行业的小白,我一直在寻找一款入门级别的麦克风设备。现在,我找到了,它就是售价仅一百出头的泰迅领夹麦克风。打开包装,一个黑色的收纳包映入眼帘相机的续航救星XTAR的VN2智能屏显功能充电器体验前几天我入手了一台a7m2,整体感觉还可以,就是电池太拉胯了,不愧是FW(废物)50。所以我决定买个双充充电器。看了一大圈,我决定入手XTAR(爱克斯达)的VN2智能屏显功能充电器超级续航双单元南卡T2初体验最近听闻南卡新推出了一款续航长达整整十个小时的真无线蓝牙耳机,真无线蓝牙耳机中我还没听说过有如此之长续航的耳机,出于好奇心,我下了单。开箱我这次入手的是黑色,外包装依旧简洁的只有产始于颜值,忠于才能野小兽随身mini筋膜枪体验筋膜枪最近半年真的非常的红火,那筋膜枪是真的有用,还是只是一个营销噱头呢?市面上大部分的筋膜枪,真的可以用傻大黑粗四个字来形容,作为一名产品颜狗,颜值才是我购买产品的第一生产力。寻活性炭能净化热水能治病?不是传统不能信,而是咱得讲科学热水,在国内一直是神一样的存在,基本没有它解决不了的问题。感冒了多喝热水,胃疼了多喝热水,亲戚串门肚子疼了多喝热水,热水简直就是太上老君炼丹炉里九转金丹一般的存在。其实生活中不乏这
公司要制作一个帮助中心,有没有推荐的软件?推荐一款好用的SaaS工具BaklibBaklib是一个在线帮助文档创建,以及官网建设好帮手。通过baklib我们每个人都可以更方便的创作管理及分享自己的文档。先看下使用Bakli2022年最美的小米手机,要来了昨天,小米正式宣布将在4月21日发布小米Civi系列新机Civi1S。目前,该机已经在电商平台开始预约,仅一天时间,预约量就超过了10万,用户对这款手机的关注度还是很高的。而今天,罗永浩,五十而知天命1972年出生的罗永浩,也到了知天命之年。2022年4月16日,在回复网友有无勇气再做手机时,罗永浩表示因为要烧投资人的钱,所以我确实没这勇气了,间接暗示,将不会再进军智能手机行业支付宝微信相继公布违规账户治理公告,这类行为将受严厉打击封面新闻记者张越熙近日,中共中央办公厅国务院办公厅印发关于加强打击治理电信网络诈骗违法犯罪工作的意见,对加强打击治理电信网络诈骗违法犯罪工作作出安排部署。4月19日,支付宝方面发布手机连上WiFi后,移动数据不关会怎样?中国移动给出了答案互联网时代,出门要用数据,于是乎每个人的手机卡里,都购买了流量或是购买了流量套餐。在WiFi还未普及的时候,流量对许多人来说根本不够用,尤其是经常在外跑的人,每个月都需要购买非常多许家印20亿美金成立造车新公司杨元庆现在折叠手机都是PPT产品小米再次调整组织架构成立技术委员会,任命14名干部2月26日,小米集团组织部下发正式文件,宣布了最新一轮组织架构调整,任命崔宝秋为集团副总裁,集团技术委员会主席,并且在核心管理岗位小米9三大伴侣正式开卖99元起,考虑入手吗?数码新资讯?互联新事件?手机快测评?二十年专业老司机,等你上车,点击右上角关注泡泡网头条号即可小米9正式开卖仅用53秒就宣告售罄,尽管早有预料,但大部分消费者还是被吓到,就连小米总华为发布全闪存存储系统兼容98的IT基础架构(观察者网讯)当地时间25日,在2019年世界移动大会(MWC)上,华为发布全新入门级全闪存存储系统OceanStorDorado3000V3,以及基于NVMe架构的OceanSt华为P30Pro真机图流出,颜值出众,3月26日发布!2019年2月26日消息,距离华为P30Pro发布还有不到一个月,此前余承东已经官宣华为P30Pro将于3月26日法国发布,在元宵节当天,余承东还公布了一张拍摄月亮的实景图,疑似使小米9要凉?刚发布就遭iQOO手机截胡春节刚刚刚结束,手机市场的竞争丝毫没有停歇的迹象,小米前脚刚刚发布数字旗舰小米9,vivo子品牌iQOO就宣布将于3月1日发布高端旗舰新机。据vivo副总裁iQOO品牌负责人冯宇飞被标注中国台湾省后,台绿营炸锅了,但这操作让人摸不着头脑当地时间2月25日,全球规模最大的通讯展世界移动通信大会(MWC)在西班牙巴塞罗那开幕。这也是全球最重要的通信产业盛会之一。然而就在会议开幕前两天,原本已报名参加的台当局官员表示拒