MariaDB:由于随机 Unicode 代码点,插入失败

问题描述 投票:0回答:1

我使用的是 MariaDB 10.6.16,但在 10.3.39 中也重现了相同的行为。我的问题是这个小 SQL 片段:

CREATE TABLE problem (
    text   TEXT
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

INSERT INTO problem (text) VALUES ('𤋮');

这会导致错误消息:

ERROR 1366 (22007) at line 5: Incorrect string value: '\xF0\xA4\x8B\xAE' for column `problem`.`text` at row 1

字节

\xF0\xA4\x8B\xAE
准确地表示字符
𤋮
,所以问题是MariaDB不允许插入这个特定字符。

我尝试过的:

  • 检查字符。它是 U+242EE,2001 年定义的一个古老的 Unicode 字符。因此,对于排序规则来说,太新的代码点应该不是问题。
  • 检查两个 MariaDB 版本,如上所述。
  • 从表定义中删除排序规则和字符集。没有变化。
  • 在 SQL 查询中使用其他 4 字节字符。它们工作得很好,只是这个(也可能是其他一些随机的 CJK 字符)。

如何说服 MariaDB 将此字符插入到我的数据库中?

mysql unicode mariadb utf8mb4
1个回答
0
投票

使用非默认字符集需要获得

CHARACTER_SET_RESULTS
CHARACTER_SET_CONNECTION
CHARACTER_SET_CLIENT
的一致字符集。

要在一条语句中完成所有这些操作,请使用

SET NAMES
,在本例中:

SET NAMES utf8mb4

将所有这些与客户端相关的系统变量设置为支持“𤋮”字符的字符集。

排序规则自动设置为字符集的默认值,尽管它也可以通过 集名称 明确显示。

© www.soinside.com 2019 - 2024. All rights reserved.