mysql - MariaDB 使用 utf8mb4 时出现错误

标签 mysql character-encoding mariadb

我正在尝试使用 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 字符集中插入字符?

最佳答案

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

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

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

关于mysql - MariaDB 使用 utf8mb4 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68082339/

相关文章:

mysql - 外国引用文献不适用于数据库中的类别系统

mysql - VB.net : Can't connect to mysql (mariadb) with ssl enabled

mysql - 一对多连接,多张表sql

java - 使用 Java 从 Oracle 数据库读取特殊字符 ( æ ø å )

Java linux 字符编码问题

Python强制unicode转义

java - MariaDB JDBC 驱动程序是否忽略连接超时?

mariadb - 计算 MariaDB 10.4 中 json 列的数组中有多少行具有嵌套值

php - centos中一次执行php文件100000次

mysql - 使用 laravel 将 PDF 上传到服务器而不是存储在本地