'FROM_BASE64'函数返回十六进制值

问题描述 投票:0回答:2

我刚刚将我正在使用的MySQL升级到MySQL版本5.6.14。当我发出这个查询时,

SELECT FROM_BASE64(TO_BASE64('MySQL'));

我收到了 4d7953514c(十六进制值)作为答案,而不是“MySQL”。到底是什么问题呢?我需要做些什么来取消十六进制吗?

注意:我的 MySQL 中的 UNHEX 函数也返回相同的结果。如果为 UNHEX 函数提供十六进制值,我将再次收到相同的十六进制值。

提前TQ

mysql base64
2个回答
1
投票

MySQL 客户端默认使用十六进制表示法显示二进制数据

TO_BASE64
的结果是带有
VAR_STRING
排序规则的
binary
,并且考虑到原始排序规则/字符集已经丢失,
FROM_BASE64
无法猜测生成时使用的字符集那些字节。因此,这个特定的客户端应用程序(其他应用程序可能会采取不同的做法)选择更安全的路线并仅显示其十六进制表示法。

您可以通过在启动 mysql 客户端时提供选项

--skip-binary-as-hex
来更改此行为。请注意,如果您不知道数据的来源,则会产生意想不到的结果。请参阅
--binary-as-hex
的文档,了解解决此问题的其他方法。

我还建议打开显示结果集元数据,因为它可以让您更好地了解导致此行为的原因。


0
投票

这个问题是很久以前的事了,但我的回答可能会对将来的某人有所帮助。 MySQL 发生了变化,添加了转换子句。所以不要做 --skip-binary-as-hex

可以使用 convert 子句。 例如:

选择转换(FROM_BASE64(TO_BASE64('MySQL'))使用UTF8);

© www.soinside.com 2019 - 2024. All rights reserved.