0

我正在构建一个以前必须处理英语和德语文本的应用程序。现在我也添加了将文本翻译成俄语和中文的功能。但似乎西里尔文和中文字符无法保存在默认的 lating1 字符集中。我使用 PHPMyAdmin 将我的字符集切换为 utf8_general_ci。它可以找到,我可以使用每个需要的字符保存新内容。

问题在于,每个像 ä,ö,ü 这样的旧变音符号都被替换为 ?。它是有线的,因为如果我再次输入变音符号以将其保存到数据库中,它可以正常工作。因此,字符集的更改似乎将每个变音符号转换为“?”。

有人可以指出我可以更改字符集但不破坏所有旧内容的方向吗?

谢谢!

4

1 回答 1

0

有很多方法可以“改变”正在使用的字符集。每个都适用于一种情况,但在其他情况下会使事情变得更糟

不幸的是,您处于所有情况中最糟糕的情况——数据消失了,取而代之的是“?”。

如果您可以重新加载数据,则使用来分析情况并确定适当的修复。

由于您要存储中文,因此您必须以 . 结尾CHARACTER SET utf8mb4,而不仅仅是 utf8。(包括英语、西里尔语和德语。)

如果您希望获得更具体的信息,我需要更多详细信息:SHOW CREATE TABLESELECT 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 的子集
  • 大多数“拉丁*”字符集有一些重叠或缺少字符。
  • Ascii 不包含任何重音字母,因此转换为它可能会产生“?”。
于 2021-11-04T22:57:05.440 回答