0

我最近在将 latin1_swedish 数据库导入新数据库时遇到了问题。Somone 制作了 Latin1 数据库来存储 Latin2 字符。在我进行数据库转储并想将其导入另一个数据库之前,一切正常。

这真的很复杂。最后,我将 sql 转储更正为正确的 ISO-8859-2 编码文件,所有字符都正确显示。仍然无法使用 Latin2 编码导入表,所有特殊字符都丢失了(可能是 PHPMyAdmin 错误?)。

将文件转换为 UTF-8 编码并将表编码更改为 utf8_general_ci 正确导入了所有内容。

接下来,整个 PHP 站点使用并显示 ISO-8859-2 字符(它的旧 PHPBB 论坛)。

在连接到数据库时,我使用“SET NAMES latin2”命令来更改编码。

令我惊讶的是,页面显示为正确的 ISO-8859-2。

如果 table 是 UTF-8 并且 Set names 是 latin2。MySQL连接是否在返回字符之前将字符转换为ISO-8859-2???

(不知道我是否应该全部写下来。如果我放了太多不需要的信息,请编辑它)

4

1 回答 1

0

SET NAMES有效地设置了数据在存储之前或调用之后、呈现给客户之前的转换方式。对于存储的情况,列的字符集定义是最终的决定因素(如果它不同于表,和数据库字符集定义)。请参阅这篇关于MySQL 中编码的信息丰富的博客文章。

于 2013-05-28T21:43:00.233 回答