MySQL 8.x中FROM_BASE64返回十六进制而非字符串问题咨询
MySQL 8.0 FROM_BASE64返回十六进制值问题解决方案
该问题的核心原因是MySQL 8.0中
FROM_BASE64()函数的返回值为BINARY二进制类型,若MySQL客户端默认开启了binary-as-hex展示选项,二进制内容就会以0x开头的十六进制格式呈现,并非函数返回结果错误。
方法1:SQL语句层面直接转换(无需调整客户端配置,推荐)
直接用CONVERT()函数将FROM_BASE64()返回的二进制值转换为指定字符集的字符串即可,正确写法如下:
SELECT CONVERT(FROM_BASE64(TO_BASE64("Abc")) USING utf8mb4) AS result;
执行后返回结果为预期的字符串Abc,后续所有字符串函数(LCASE()、SUBSTRING()等)均可正常作用于该返回值。
之前直接给FROM_BASE64加USING子句报错是语法错误,USING是CONVERT()函数的参数,不是FROM_BASE64()的参数。
方法2:调整客户端启动参数关闭二进制十六进制展示
--skip-binary-as-hex是MySQL客户端的启动参数,不是SQL可执行的系统变量,因此直接写在SQL语句中执行会报1064语法错误。
如果使用官方mysql命令行客户端,启动时追加该参数即可:
mysql -u 你的用户名 -p --skip-binary-as-hex
启动后执行原生的SELECT FROM_BASE64(TO_BASE64("Abc")) AS result;语句即可直接返回字符串格式结果。
异常操作原因说明
- 使用
UNHEX()处理属于逻辑错误:FROM_BASE64()已经返回了目标内容的二进制值,不需要再做十六进制转二进制操作,重复转换会导致内容异常 - 字符串函数对
BINARY类型无效:LCASE()、SUBSTRING()等函数作用于二进制值时不会按字符串规则处理,转换为字符串类型后即可正常使用
内容的提问来源于stack exchange,提问作者Payel Senapati
相关产品推荐
相关产品推荐

