我正在使用 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",但使用 BINARY
或 BLOB
(不是 big5)作为中间。