mariadb 错误1366(22007):不正确的字符串值:'\x92t'

odopli94  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(212)
Server version: 10.8.3-MariaDB
Server charset: UTF-8 Unicode (utf8mb4)
InnoDB

我在尝试导入到空白数据库时遇到错误(数据库已创建,现在尝试导入):
第19669行出现错误1366(22007):不正确的字符串值:'\x92t',用于第1行中glen_wazzup . nuke_bbsearch_wordlist . word_text
“SQL:

CREATE TABLE `nuke_bbsearch_wordlist` (
      `word_text` varchar(50) binary NOT NULL default '',
      `word_id` mediumint(8) unsigned NOT NULL auto_increment,
      `word_common` tinyint(1) unsigned NOT NULL default '0',
      PRIMARY KEY  (`word_text`),
      KEY `word_id` (`word_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=18719 ;

第19669行(错误行):

INSERT INTO `nuke_bbsearch_wordlist` VALUES (0x6469646e9274, 6895, 0);

从我的阅读来看,它与字符编码有关,字符是一个撇号,电线在某处交叉了。我读到过你可以使用ALTER语句,但这是一个原始的sql导入文件,还不能导入,所以我不知道如何(或确切地“什么”)改变文件,使其导入?

41ik7eoe

41ik7eoe1#

didn’t--请注意,撇号不是ascii字符,如果以latin 1(和几个字符集)编码,则为十六进制92;如果以utf8或utf8 mb 4编码,则为E28099。
另一方面,您已声明“服务器字符集:UTF-8 Unicode(utf8 mb 4)",但x92在UTF-8中无效
您正在尝试导入?如何导入?从什么导入?从mysqldump导入?从CSV文件导入?您有一个INSERT语句;这是从垃圾堆里来的吗
在任何情况下,声明文件是“字符集latin 1”可能都是正确的。
排序规则并不重要。

eoxn13cs

eoxn13cs2#

解决方案可能很简单,只需将导入源文件从ISO-8859-1转换为UTF-8编码即可。
要在Linux上进行转换,您可以运行recode l1..u8 <filename >filename.out(如果已安装)或iconv -f ISO-8859-1 -t UTF-8 -o filename.out filename。然后将filename.out导入MySQL。
但是,源编码可能与ISO-8859-1不同(例如,它可能是ISO-8859-2),因此您可能需要尝试多种源编码,并检查哪个输出文件看起来正确(例如,通过查看filename.out中的非ASCII字符)。

相关问题