将 MySQL 字段字符集从 latin1 更改为 utf8_general_ci 会破坏元音变音 (ä,ö,ü)
Posted
技术标签:
【中文标题】将 MySQL 字段字符集从 latin1 更改为 utf8_general_ci 会破坏元音变音 (ä,ö,ü)【英文标题】:Change MySQL Field Charset from latin1 to utf8_general_ci breaks umlauts (ä,ö,ü) 【发布时间】:2021-12-17 18:30:03 【问题描述】:我正在构建一个以前必须处理英语和德语文本的应用程序。现在我也添加了将文本翻译成俄语和中文的功能。但似乎西里尔文和中文字符无法保存在默认的 lating1 字符集中。我使用 phpMyAdmin 将我的字符集切换为 utf8_general_ci。它可以查找,我可以使用每个需要的字符保存新内容。
问题在于,每个像 ä,ö,ü 这样的旧变音符号都被替换为 ?。 它是有线的,因为如果我再次输入变音符号以将其保存到数据库中,它可以正常工作。所以字符集的变化似乎把每个变音符号都变成了“?”。
有人可以指出我可以更改字符集但不破坏所有旧内容的方向吗?
谢谢!
【问题讨论】:
【参考方案1】:有很多方法可以“更改”正在使用的字符集。每个都适用于一种情况,但会使情况更糟适用于其他情况。
不幸的是,您处于所有情况中最糟糕的情况——数据消失了,取而代之的是“?”。
如果您可以重新加载数据,请使用this 分析情况并使用this 确定适当的修复方法。
由于您要存储中文,因此您必须以 CHARACTER SET utf8mb4
结尾,而不仅仅是 utf8。 (包括英语、西里尔语和德语。)
如果您想了解更多具体信息,我需要更多详细信息:SHOW CREATE TABLE
、SELECT HEX(..)
来自第一个链接等。
一些字符集更改需要更改位。以ä
为例:
Character set(s) HEX encoding
utf8mb4, utf8 C3A4
cp1250, cp1257, dec8,
latin1, latin2, latin5, latin7 E4
cp850, cp852, keybcs2 84
eucjpms, ujis 8FABA3
gb18030 81308A31
hp8 CC
macce, macroman 8A
swe7 7B
英文字母在大多数字符集之间不会改变。重音字母 - 混合体。
utf8 是 utf8mb4 的子集 大多数“latin*”字符集有一些重叠或缺少字符。 Ascii 不包含任何重音字母,因此转换为它可能会产生“?”。【讨论】:
我有所有数据的备份,我只需要知道如何在不破坏“旧”数据的情况下更改字符集。谢谢! @jDoe - 我添加了更多;它在某种程度上解决了您的评论。以上是关于将 MySQL 字段字符集从 latin1 更改为 utf8_general_ci 会破坏元音变音 (ä,ö,ü)的主要内容,如果未能解决你的问题,请参考以下文章
Mysql 将排序规则从 latin1_swedish_ci 更改为 utf8mb4_bin
如何将数据库中的所有字段从 latin1_swedish_ci 更改为 utf8_general_ci?
如何将所有行的排序规则从 latin1_swedish_ci 更改为 utf8_unicode_ci?