Character encoding 插入匈牙利文字字符时出错

Character encoding 插入匈牙利文字字符时出错,character-encoding,mariadb,mariadb-10.2,Character Encoding,Mariadb,Mariadb 10.2,我正在尝试通过SQL查询插入此文本 INSERT INTO `tbl_instructions` (`No`, `Language`, `Text`) VALUES ('Introduction','HU','Kérdőív - ""Ismerd meg Önmagad!"" Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja e

我正在尝试通过SQL查询插入此文本

INSERT INTO `tbl_instructions` (`No`, `Language`, `Text`) VALUES
('Introduction','HU','Kérdőív - ""Ismerd meg Önmagad!""  Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja ennek a személyiségtesztnek is. Ez a teszt egy negyedórás szemtől szembeni beszélgetésnek felel meg.  A teszt kitöltése nagyjából fél órát igényel. Közben megszakíthatja az internetkapcsolatot, elég a teszt elküldéséhez visszaállítania azt.  Jó szórakozást kívánunk a teszthez, természetesen az adatait bizalmasan kezeljük és nem osztjuk meg senkivel. Ezt garantálja  Andreas és Telse Gross');
我得到:

#1366-列的字符串值不正确:'\xC5\x91\xC3\xADv…' 第1行的my_database.tbl_instructions.Text


我尝试了
utf8\u unicode\u ci
UTf8mb4\u unicode\u ci
,但仍然收到相同的错误。

这可能是目标表中
Text
列的排序规则问题

考虑以下内容,其中使用了使用
latin1\u general\u ci
排序规则创建的
Text
列:

CREATE TEMPORARY TABLE `tbl_instructions` (`Text` VARCHAR(1000) COLLATE latin1_general_ci);

INSERT INTO `tbl_instructions` (`Text`) VALUES ('Kérdőív - ""Ismerd meg Önmagad!""  Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja ennek a személyiségtesztnek is. Ez a teszt egy negyedórás szemtől szembeni beszélgetésnek felel meg.  A teszt kitöltése nagyjából fél órát igényel. Közben megszakíthatja az internetkapcsolatot, elég a teszt elküldéséhez visszaállítania azt.  Jó szórakozást kívánunk a teszthez, természetesen az adatait bizalmasan kezeljük és nem osztjuk meg senkivel. Ezt garantálja  Andreas és Telse Gross');
这会产生以下错误:

错误代码:1366。不正确的字符串值:“\xC5\x91\xC3\xADv…”用于 第1行的“文本”列

现在考虑下面的,使用<代码> UTF8Mb4Y0900AiiCi:

CREATE TEMPORARY TABLE `tbl_instructions` (`Text` VARCHAR(1000) COLLATE utf8mb4_0900_ai_ci);

INSERT INTO `tbl_instructions` (`Text`) VALUES ('Kérdőív - ""Ismerd meg Önmagad!""  Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja ennek a személyiségtesztnek is. Ez a teszt egy negyedórás szemtől szembeni beszélgetésnek felel meg.  A teszt kitöltése nagyjából fél órát igényel. Közben megszakíthatja az internetkapcsolatot, elég a teszt elküldéséhez visszaállítania azt.  Jó szórakozást kívánunk a teszthez, természetesen az adatait bizalmasan kezeljük és nem osztjuk meg senkivel. Ezt garantálja  Andreas és Telse Gross');
这将成功运行

仅仅指定排序规则
INSERT
是不够的-如果目标列是不兼容的排序规则,那么您将看到错误消息

该表应该修改为正确的排序规则-我不是建议它应该是
utf8mb4\u 0900\u ai\u ci
。使用适合您需要的排序规则(例如,
latin2\u general\u ci
也适用于您的字符集)

更新以下操作将RDBMS改为MariaDB而不是MySQL 根据您关于使用MariaDB而不是MySQL的评论,您可以使用MariaDB 10.2中提供的
utf8mb4\u general\u ci


下面是一个for MariaDB 10.3的示例,显示它使用该排序规则工作。

这可能是目标表中的
Text
列的排序规则问题

考虑以下内容,其中使用了使用
latin1\u general\u ci
排序规则创建的
Text
列:

CREATE TEMPORARY TABLE `tbl_instructions` (`Text` VARCHAR(1000) COLLATE latin1_general_ci);

INSERT INTO `tbl_instructions` (`Text`) VALUES ('Kérdőív - ""Ismerd meg Önmagad!""  Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja ennek a személyiségtesztnek is. Ez a teszt egy negyedórás szemtől szembeni beszélgetésnek felel meg.  A teszt kitöltése nagyjából fél órát igényel. Közben megszakíthatja az internetkapcsolatot, elég a teszt elküldéséhez visszaállítania azt.  Jó szórakozást kívánunk a teszthez, természetesen az adatait bizalmasan kezeljük és nem osztjuk meg senkivel. Ezt garantálja  Andreas és Telse Gross');
这会产生以下错误:

错误代码:1366。不正确的字符串值:“\xC5\x91\xC3\xADv…”用于 第1行的“文本”列

现在考虑下面的,使用<代码> UTF8Mb4Y0900AiiCi:

CREATE TEMPORARY TABLE `tbl_instructions` (`Text` VARCHAR(1000) COLLATE utf8mb4_0900_ai_ci);

INSERT INTO `tbl_instructions` (`Text`) VALUES ('Kérdőív - ""Ismerd meg Önmagad!""  Ahogy az ókori görögök mondták: ""Ismerd meg Önmagad!"" - Ez a célja ennek a személyiségtesztnek is. Ez a teszt egy negyedórás szemtől szembeni beszélgetésnek felel meg.  A teszt kitöltése nagyjából fél órát igényel. Közben megszakíthatja az internetkapcsolatot, elég a teszt elküldéséhez visszaállítania azt.  Jó szórakozást kívánunk a teszthez, természetesen az adatait bizalmasan kezeljük és nem osztjuk meg senkivel. Ezt garantálja  Andreas és Telse Gross');
这将成功运行

仅仅指定排序规则
INSERT
是不够的-如果目标列是不兼容的排序规则,那么您将看到错误消息

该表应该修改为正确的排序规则-我不是建议它应该是
utf8mb4\u 0900\u ai\u ci
。使用适合您需要的排序规则(例如,
latin2\u general\u ci
也适用于您的字符集)

更新以下操作将RDBMS改为MariaDB而不是MySQL 根据您关于使用MariaDB而不是MySQL的评论,您可以使用MariaDB 10.2中提供的
utf8mb4\u general\u ci


下面是一个用于MariaDB 10.3的示例,显示它使用该排序规则工作。

表和目标列的排序规则是什么?“我尝试了utf8\u unicode\u ci和UTf8mb4\u unicode\u ci”这些是我尝试的排序规则。对于Text列是Text,其余的是varchar 255,我已经更改了标记,以反映您使用的是MariaDB 10.2而不是MySql。发布时最好始终标记正确的RDBMS,因为它通常会影响答案表和目标列的排序规则是什么?“我尝试了utf8\U unicode\U ci和UTf8mb4\U unicode\U ci”这些是我尝试的排序规则。对于Text列是Text,其余的是varchar 255,我已经更改了标记,以反映您使用的是MariaDB 10.2而不是MySql。发布时最好始终标记正确的RDBMS,因为它通常会影响应答。我的数据库是10.2.38-MariaDB-MariaDB服务器。要编辑表结构时,utf8mb4_0900_ai_ci不作为排序规则类型存在。我测试了latin2_general_ci,但它不工作,它给出了相同的错误。您是如何测试它的?您必须更改表列的排序规则,而不是在
INSERT
语句中。在MariaDB 10.2中,我认为您可以使用
utf8mb4\u general\u ci
@devdevdev顺便说一句,您没有在问题上标记MariaDB-您标记了MySQL。如果事先知道你使用的实际RDBMS会更好我很抱歉,我误解了你的意思。我更改了表排序规则,而不是每列排序规则。现在它与utf8mb4_general_ci以及MySQL与Maria DB I的性能都很好,尽管它们的行为相同:)@devdevdev没有问题-很高兴我们最终解决了这个问题。MySQL和MariaDB共享一个历史记录,但正如您在排序规则名称中看到的,有时会有差异。我的数据库是10.2.38-MariaDB-MariaDB服务器。要编辑表结构时,utf8mb4_0900_ai_ci不作为排序规则类型存在。我测试了latin2_general_ci,但它不工作,它给出了相同的错误。您是如何测试它的?您必须更改表列的排序规则,而不是在
INSERT
语句中。在MariaDB 10.2中,我认为您可以使用
utf8mb4\u general\u ci
@devdevdev顺便说一句,您没有在问题上标记MariaDB-您标记了MySQL。如果事先知道你使用的实际RDBMS会更好我很抱歉,我误解了你的意思。我更改了表排序规则,而不是每列排序规则。现在它与utf8mb4_general_ci以及MySQL与Maria DB I的性能都很好,尽管它们的行为相同:)@devdevdev没有问题-很高兴我们最终解决了这个问题。MySQL和MariaDB共享一段历史,但正如您所看到的排序规则名称,有时会有所不同