Navicat (MySQL) 字符编码错误



我正在使用 Navicat 11.0.8,我正在尝试使用查询将值插入表中,但是当我尝试使用查询插入值时,它可以工作,但字符编码搞砸了!

正如您在我的代码中看到的那样,该表是"表",我正在插入ID,VNUM和NAME。VNUM 是"体字",名称是"Versão"。

INSERT INTO table VALUES ('1', '体字', 'Versão');

它不是在 VNUM 上显示"体字",在名称上显示"Versão",而是显示"ä1/2"å—"和"Versão"。

这对我来说非常糟糕,因为我正在尝试插入包含大量信息的 5000 多行。

我尝试使用以下命令设置表的字符编码:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
&    
ALTER TABLE table CONVERT TO CHARACTER SET big5 COLLATE big5_chinese_ci;
&
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

我还尝试删除我的表并创建一个字符编码已经为 utf-8 的新表并发送值。

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
`vnum` int(11) unsigned NOT NULL default '0',
`name` varbinary(200) NOT NULL default 'Noname',
`locale_name` varbinary(24) NOT NULL default 'Noname',
) ENGINE=MyISAM DEFAULT CHARSET=big5_chinese_ci;
INSERT INTO `table` VALUES ('1', '体字', 'Versão'); 

仍然显示"ä1/2"å-"和"Versão"。

如果我手动编辑表格,它显示是正确的!但我不会编辑 5000+ 行...

it shows '体字' and 'Versão'. -- 听起来你SET NAMES latin1 . 做

SET NAMES utf8;

连接后和插入之前。 这告诉mysqld客户端正在使用什么编码。

验证通过执行SELECT col, HEX(col) ...存储的数据 用于体字的 utf8(或 utf8mb4)十六进制是否E4BD93E5AD97 。 将这些相同的字节解释latin1会给你体字;

UTF8 可以处理这些,加上 ã ;我不知道big5是否可以。

实际上,我建议你使用 utf8mb4 而不是 utf8。 这是为了以防您遇到一些 4 字节的中文字符。

如果您仍然有 latin1 列需要更改为 utf8mb4,请参阅我的博客,其中讨论了"2 步 ALTER",但使用 BINARYBLOB(不是 big5)作为中间。

相关内容

  • 没有找到相关文章

最新更新