我在数据库表中插入两个字符(É (0xC389) and П (0xD0BF))
时遇到问题,该表有Charset UTF-8 和Collation UTF-8。这两个字符都在。 U+0800 - U+FFFF
范围内。所以,我知道这两个字符需要16 bits
奇怪的是,É (0xC389)
正在从DBVisualizer中插入表中并显示正常,但П (0xD0BF)
未正确保存。我首先想到的可能是它的客户端问题,但为什么它与1个字符发生在同一范围内?
我对这种行为感到非常惊讶。所以,我不明白,如果我对UTF-8的理解是错误的,或者它确实是一个DBVisualizer错误,或者我错过了什么?
答案 0 :(得分:1)
你的第一句话错了。
你在看拉丁语和西里尔语的混合物吗?还是韩文?
UTF-8 Hex Unicode Visible Meaning
C389 201=x00C9 É LATIN CAPITAL LETTER E WITH ACUTE
D09F 1055=x041F П CYRILLIC CAPITAL LETTER PE
EC8E89 xC389 쎉 HANGUL SYLLABLE SSENJ
ED82BF xD0BF 킿 HANGUL SYLLABLE KIH
也就是说,É
是Unicode U+00C9
("代码点201"),并且在文本中使用时编码为十六进制C389
。 (ETC)
前两个需要16位UTF-8;另外两个需要24位。对于MySQL的CHARACTER SET
utf8或utf8mb4也是如此。
看看你是否可以让DBVisualizer谈论UTF-8,而不是Unicode。