当我编写 CHAR() 函数时。例如:
mysql> select char(97);
+--------------------+
| char(97) |
+--------------------+
| 0x61 |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
我知道这是不对的。
mysql> select char(97);
+--------------------+
| char(97) |
+--------------------+
| a |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
也许这是正确的情况,对吗?
你能解释一下我该如何解决这个问题吗?
在 MySQL 8.0.19 之前,您所面临的问题并不存在。binary-as-hex从 MySQL 8.0.19 开始,客户端选项默认启用。
运行status或\s在 MySQL 中。您会注意到一行关于二进制数据的内容。如果将其指定为十六进制,CHAR()则 和等函数的输出UNHEX()将显示为十六进制而不是普通文本。
为了避免这种情况,您可以使用 的 USING charset 子句CHAR()。
mysql> SELECT CHAR(97);
+--------------------+
| CHAR(97) |
+--------------------+
| 0x61 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT CHAR(97 USING utf8mb4);
+------------------------+
| CHAR(97 USING utf8mb4) |
+------------------------+
| a |
+------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用--skip-binary-as-hex. 在 Windows 中要遵循的步骤是:
打开命令提示符。
更改目录。就我而言,命令是:
mysql> SELECT CHAR(97);
+--------------------+
| CHAR(97) |
+--------------------+
| 0x61 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT CHAR(97 USING utf8mb4);
+------------------------+
| CHAR(97 USING utf8mb4) |
+------------------------+
| a |
+------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
跑步
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
Run Code Online (Sandbox Code Playgroud)
输入密码。
现在,函数的输出CHAR()将如您所期望的那样。
注意:该--skip-binary-as-hex方法一直有效,直到您退出 MySQL。每次打开 MySQL 时都需要使用--skip-binary-as-hex方法,这样就不会显示十六进制值。
您可以参考这些链接以获取更多信息:
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |