繁体   English   中英

在 MySQL 8.x 中,字符串函数 FROM_BASE64(str) 以十六进制形式返回结果而不是字符串

[英]In MySQL 8.x the string function FROM_BASE64(str) returns result in hexadecimal form instead of a string

我有以下疑问 -

SELECT "Abc" AS result;
+--------+
| result |
+--------+
| Abc    |
+--------+

SELECT TO_BASE64("Abc") AS result;
+--------+
| result |
+--------+
| QWJj   |
+--------+

SELECT FROM_BASE64(TO_BASE64("Abc")) AS result;
+----------------+
| result         |
+----------------+
| 0x416263       |
+----------------+

mysql 开发站点中的--binary-as-hex页面说-

要禁用十六进制表示法,请使用--skip-binary-as-hex

我尝试了以下但出现错误 -

mysql> SELECT FROM_BASE64(TO_BASE64("Abc")) --skip-binary-as-hex AS result;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as-hex AS result' at line 1
mysql> SELECT FROM_BASE64(TO_BASE64("Abc") --skip-binary-as-hex)  AS result;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as-hex)  AS result' at line 1
mysql> SELECT FROM_BASE64(TO_BASE64("Abc" --skip-binary-as-hex))  AS result;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as-hex))  AS result' at line 1

在同一页面中,他们说我如何使用USING utf8mb4子句来获取CHAR()CONVERT()函数的结果,但他们没有说明有关FROM_BASE64()函数的任何内容。 尽管如此,我尝试了它并出现错误 -

SELECT FROM_BASE64(TO_BASE64("Abc") USING utf8mb4) AS result;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING utf8mb4) AS result' at line 1

我尝试了UNHEX()函数 -

ELECT UNHEX(FROM_BASE64(TO_BASE64("Abc"))) AS result;
+----------------+
| result         |
+----------------+
| 0x0ABC         |
+----------------+

显然,这不是想要的结果,而且所有的结果都在资本中。 这里LCASE()不会工作,因为它会将每个单词都变成小写。

甚至,这个结果不在字符串中,正如 -

SELECT SUBSTRING(UNHEX(FROM_BASE64(TO_BASE64("Abc"))) FROM 4) AS result;
+----------------+
| result         |
+----------------+
| 0x             |
+----------------+

所以唯一的选择似乎是禁用-binary-as-hex

但我找不到办法做到这一点。

在stackoverflow中有类似的问题 -

“FROM_BASE64”函数返回十六进制值

但它是在 MySQL 版本 5.6.14 上。 我正在使用 MySQL 版本 8.0.27 -

mysql --version
mysql  Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)

所以我的情况是不同的。

--skip-binary-as-hex 选项将用作 mysql 命令的选项,当您从 shell 提示符打开它时。 它不是在 SQL 语法中使用的选项。 https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_binary-as-hex

也就是说,即使启用了 binary-as-hex,您也可以将二进制转换为字符串:

mysql> SELECT FROM_BASE64(TO_BASE64("Abc")) AS result;
+----------------+
| result         |
+----------------+
| 0x416263       |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT(FROM_BASE64(TO_BASE64("Abc")) USING utf8mb4) AS result;
+--------+
| result |
+--------+
| Abc    |
+--------+
1 row in set (0.00 sec)

您可能需要使用不同的字符编码。 我的是 utf8mb4,但你的可能不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM