我刚刚将我正在使用的MySQL升级到MySQL版本5.6.14。当我发出这个查询时,
SELECT FROM_BASE64(TO_BASE64('MySQL'));
我收到了 4d7953514c(十六进制值)作为答案,而不是“MySQL”。到底是什么问题呢?我需要做些什么来取消十六进制吗?
注意:我的 MySQL 中的 UNHEX 函数也返回相同的结果。如果为 UNHEX 函数提供十六进制值,我将再次收到相同的十六进制值。
提前TQ
TO_BASE64
的结果是带有 VAR_STRING
排序规则的 binary
,并且考虑到原始排序规则/字符集已经丢失,FROM_BASE64
无法猜测生成时使用的字符集那些字节。因此,这个特定的客户端应用程序(其他应用程序可能会采取不同的做法)选择更安全的路线并仅显示其十六进制表示法。
您可以通过在启动 mysql 客户端时提供选项
--skip-binary-as-hex
来更改此行为。请注意,如果您不知道数据的来源,则会产生意想不到的结果。请参阅 --binary-as-hex
的文档,了解解决此问题的其他方法。
我还建议打开显示结果集元数据,因为它可以让您更好地了解导致此行为的原因。
这个问题是很久以前的事了,但我的回答可能会对将来的某人有所帮助。 MySQL 发生了变化,添加了转换子句。所以不要做 --skip-binary-as-hex
可以使用 convert 子句。 例如:
选择转换(FROM_BASE64(TO_BASE64('MySQL'))使用UTF8);