【问题标题】:MariaDB errors using utf8mb4MariaDB 错误使用 utf8mb4
【发布时间】:2021-06-22 11:01:14
【问题描述】:

我正在尝试使用utf8mb4 字符集和utf8mb4_unicode_ci 排序规则创建数据库。但是,我似乎无法在我的表格中插入 unicode 字符。

我做了什么:

SET NAMES utf8mb4;
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE mydb;
CREATE TABLE test (val VARCHAR(16));
INSERT INTO test (val) VALUES ("á");

ERROR 1366 (22007): Incorrect string value: '\xA0' for column `mydb`.`test`.`val` at row 1

如果我不使用SET NAMES utf8mb4;,那么我可以毫无问题地插入"á" 字符。

这些是我的默认字符集变量:

show variables like 'char%'; show variables like 'collation%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | cp850                                         |
| character_set_connection | cp850                                         |
| character_set_database   | utf8mb4                                       |
| character_set_filesystem | binary                                        |
| character_set_results    | cp850                                         |
| character_set_server     | utf8                                          |
| character_set_system     | utf8                                          |
| character_sets_dir       | C:\Program Files\MariaDB 10.5\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.000 sec)

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | cp850_general_ci   |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8_general_ci    |
+----------------------+--------------------+
3 rows in set (0.000 sec)

在使用SET NAMES之后:

show variables like 'char%'; show variables like 'collation%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | utf8mb4                                       |
| character_set_connection | utf8mb4                                       |
| character_set_database   | utf8mb4                                       |
| character_set_filesystem | binary                                        |
| character_set_results    | utf8mb4                                       |
| character_set_server     | utf8                                          |
| character_set_system     | utf8                                          |
| character_sets_dir       | C:\Program Files\MariaDB 10.5\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.000 sec)

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8_general_ci    |
+----------------------+--------------------+
3 rows in set (0.000 sec)

如何解决此问题,以便在 utf8mb4 字符集中插入字符?

【问题讨论】:

    标签: mysql character-encoding mariadb


    【解决方案1】:

    您的文本(或 .sql)文件本身以 cp850 编码,而不是 utf-8。

    您可以看到编码值是单个字节 - UTF-8 编码应该至少是 2 个字节。

    为了使用SET NAMES utf8mb4; 命令,您的文件需要转换为utf-8。一些高级编辑器允许这样做,甚至在现代版本中,Windows 记事本也可以将文本文件保存为 utf-8。

    【讨论】:

    • 这是有道理的,但是我使用的是mysql 命令行客户端,而不是文件。我是否需要更改终端的字符编码或类似的东西?
    • 我强烈建议使用文本文件和输入重定向来处理不简单的单行。
    • 不,Windows 命令行默认不是 UTF-8。 8 位字符集取决于语言。
    【解决方案2】:

    如果您使用 Windows cmd,命令“chcp”控制“代码页”。 chcp 65001 提供 utf8,但它也需要安装一个特殊的字符集。 要在控制台窗口中设置字体:右键单击窗口标题 → 属性 → 字体 → 选择 Lucida Console

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2019-11-04
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2021-04-04
      • 2019-03-30
      相关资源
      最近更新 更多