在 MySQL 中,CHAR() 函数工作得很奇怪

Jos*_*_01 5 mysql char

当我编写 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)

也许这是正确的情况,对吗?

你能解释一下我该如何解决这个问题吗?

Ran*_*son 4

在 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 中要遵循的步骤是:

  1. 打开命令提示符。

  2. 更改目录。就我而言,命令是:

    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)
  3. 跑步

    cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    
    Run Code Online (Sandbox Code Playgroud)
  4. 输入密码。

  5. 现在,函数的输出CHAR()将如您所期望的那样。

注意:该--skip-binary-as-hex方法一直有效,直到您退出 MySQL。每次打开 MySQL 时都需要使用--skip-binary-as-hex方法,这样就不会显示十六进制值。

您可以参考这些链接以获取更多信息: