你正走在一条崎岖的道路上。十六进制 E4 与 Psi 无关。它是从哪里来的?
在某些包含非 Ascii 字符的标题上执行 SELECT title, HEX(title) ...。
psi 的 UTF-8 编码是两个十六进制字符 CEA8。
E4,当解释为latin1 时代表ä。这有意义吗?
- 该列需要更改为
CHARACTER SET utf8(或utf8mb4)。但是有一种正确的方法可以做到这一点,并且有一种方法会使事情变得更糟。在讨论哪个是正确的之前,让我们先看看 HEX。
-
VARIABLEs 控制 客户端 使用什么编码。切换编码时需要更改多项设置。
更多参考资料:
没有字符集将 E4 映射到 Psi:
cp1250, cp1257, dec8, latin1, latin2, latin5, latin7 25 24
'Kaze no Tani no Nausicaä'
cp852 25 24 'Kaze no Tani no Nausicań'
cp850 25 24 'Kaze no Tani no Nausicaõ'
macce 25 24 'Kaze no Tani no Nausicaš'
hp8 25 24 'Kaze no Tani no Nausicað'
greek 25 24 'Kaze no Tani no Nausicaδ'
keybcs2 25 24 'Kaze no Tani no NausicaΣ'
cp1251 25 24 'Kaze no Tani no Nausicaд'
koi8r, koi8u 25 24 'Kaze no Tani no NausicaД'
cp866 25 24 'Kaze no Tani no Nausicaф'
armscii8 25 24 'Kaze no Tani no NausicaՊ'
hebrew 25 24 'Kaze no Tani no Nausicaה'
cp1256 25 24 'Kaze no Tani no Nausicaن'
tis620 26 24 'Kaze no Tani no Nausicaไ'
geostd8 26 24 'Kaze no Tani no Nausicaჰ'
macroman 26 24 'Kaze no Tani no Nausica‰'
所以,我担心犯了两个错误。你有另一个错误文本的例子吗?
Latin1 不能处理希腊字母。也不是西里尔文。也不是中文。等等 那么,ä 是“正确的”吗? (我一直在追问如何在 E4 和 Psi 之间切换。)
所以你可能应该转换为 utf8mb4。
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
将转换所有表t中的文本列。
仅更改一列:
ALTER TABLE t MODIFY COLUMN c VARCHAR(...)
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
它必须包含您没有的所有其他内容(例如,NULL 或 NOT NULL)。