前记:无意中发现在8.0.21版本及以上的数据库中执行unhex命令,无法给出想要的结果,很是苦恼,所以查找资料想看看到底是什么问题。
一、查阅资料:
查阅官网发现mysql client侧有一个--binary-as-hex
参数。8.0.19之后交互模式默认为true,即通过mysql -u -h登录数据库的方式时,该参数值默认为true,其余情况下默认为false。该参数影响了char()和unhex()函数。
--binary-as-hex
when enabled affects display of all binary strings, including those returned by functions such as CHAR()
and UNHEX()
-
--binary-as-hex
disabled:mysql> SELECT CHAR(0x41), UNHEX('41'); +------------+-------------+ | CHAR(0x41) | UNHEX('41') | +------------+-------------+ | A | A | +------------+-------------+
-
--binary-as-hex
enabled:mysql> SELECT CHAR(0x41), UNHEX('41'); +------------------------+--------------------------+ | CHAR(0x41) | UNHEX('41') | +------------------------+--------------------------+ | 0x41 | 0x41 | +------------------------+--------------------------+
二、解决方案:
如果想正常使用解析hex数据,有如下方式:
1、在mysql客户端端命令行加 --skip-binary-as-hex参数,即:
mysql -uxx -pxx --socket=/mydata/test/test.sock --skip-binary-as-hex
2、在参数启用的情况下,可使用char()函数指定字符集。
mysql> SELECT CHAR(0x41 USING utf8mb4);
+--------------------------+
| CHAR(0x41 USING utf8mb4) |
+--------------------------+
| A |
+--------------------------+
3、通过convert()函数指定字符集
mysql> SELECT CONVERT(UNHEX('41') USING utf8mb4);
+------------------------------------+
| CONVERT(UNHEX('41') USING utf8mb4) |
+------------------------------------+
| A |
+------------------------------------+
参考文章:
https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_binary-as-hex