【问题标题】:Encoding error with polish charset during transfer of database / server seting up在传输数据库/服务器设置期间使用波兰字符集编码错误
【发布时间】:2015-12-02 03:43:38
【问题描述】:

我正在尝试将我的一个数据库从一台主机 (home.pl) 转移到另一台主机(我新设置的服务器)。我要转移的脚本是 wordpress。不幸的是,无论使用哪种方法,我都在努力解决编码问题。

新主机配置

在我的新服务器中,我在 my.cnf 中使用以下指令:

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_general_ci
character-set-server = utf8
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 

[client]
default-character-set=utf8

MySQL 变量:

character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    utf8
character_set_system    utf8
collation_connection    utf8_general_ci
collation_database  utf8_general_ci
collation_server    utf8_general_ci

新服务器上的 Php.ini:

; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"

旧主机配置

我在我试图从中传输数据库的旧主机中运行了 SHOW VARIABLES 并且得到了以下信息:

character_set_client    utf8
character_set_connection    utf8mb4
character_set_database  utf8
character_set_results   utf8
character_set_server    latin2
character_set_system    utf8
/usr/local/pssql55/share/charsets/
collation_connection    utf8mb4_general_ci
collation_database  utf8_polish_ci
collation_server    latin2_general_ci

已尝试的传输方法

1) 通过 phpmyadmin 传输

我尝试过使用 PHPMYADMIN 导出/导入。特别是,我在通过 phpmyadmin 导出和导入期间指出 UTF-8 作为文件字符集。

在源服务器和新主机上的 phpmyadmin 中有什么奇怪的地方我看不到波兰字符(没有波兰字符的输出是一样的)。

2) 通过 mysql dump 导出/导入

我也尝试过使用:

 mysqldump -h OLD_HOST -u OLD_USER -p DB | mysql -h localhost -u root NEW DATABASE

但编码也失败了。

也尝试使用编码变量,但也失败了:

 mysqldump --default-character-set=latin1  | mysql --default-character-set=utf8 

转储文件

在我使用带有 UTF-8 编码集的程序员记事本的转储文件中,字符如下所示:

"Ä" instead of "ę"

在我看到的 microsoft word 中打开它们

Ä™ instead of "ę"

编码转换器 (gżegżółka) 识别出文件位于: C:\Users\mkondej001\Desktop\14271425_mk.sql

Kodowanie: Unicode UTF-8
EOL: LF (Unix) 

任何线索如何正确传输数据库/设置服务器变量?

【问题讨论】:

  • 我认为这根本不是服务器问题。 PhpMyAdmin 是否询问在导出和导入时使用什么编码?您是否在可以选择编码的常规文本编辑器中检查了转储?
  • Álvaro G. Vicario 请在上面找到与您的问题相关的更新背景。
  • 正确编码为 UTF-8 的 ę 字符在您使用不支持 UTF-8 的工具打开时显示为 Ä™ ,这与你得到的 Ä 奇怪地相似。您是否完全确定您的编辑器和应用程序已正确配置为使用 UTF-8?
  • 您是否 10000% 确定在将文件导入到目标数据库时明确指定了 UTF-8?
  • 您可以在导出数据库时使用--hex-blob,这将防止与文本编辑器或一般用户环境相关的编码问题。

标签: mysql wordpress character-encoding phpmyadmin mojibake


【解决方案1】:

最后我发现问题与在我的原始服务器中错误地将数据写入 SQL 的事实有关。

我最终使用以下方式转移数据库:

mysqldump --default-character-set=utf8 [ORYGINAL_DB] | mysql [TARGET_DB] --default-character-set=utf8

和执行:

UPDATE [table name] SET [field] = CONVERT(BINARY CONVERT([field] USING latin2) USING utf8)

因为这是这里的建议:

strange character encoding of stored data , old script is showing them fine new one doesn't

希望上述解决方案对其他人也有帮助。

【讨论】:

    【解决方案2】:
    SET NAMES utf8;
    

    (默认是latin11,导致Ä™。)

    注意:init_connect 不会为root(或任何SUPER)用户执行。所以这让你失望了:

    init_connect='SET NAMES utf8'
    

    【讨论】:

    • 根据您的建议,我尝试使用 mysqldump 命令将数据库转储到文件,然后使用 mysql 我手动执行“SET NAMES utf8 然后 \.dumpfile.sql 但它没有帮助。我有还尝试注释掉init_connect,然后使用mysqldump命令和mysql与“SET NAMES utf8”,然后\.dumpfile.sql但也失败了。你会这么好心并就如何正确执行传输提出建议吗?
    • 我发现我的源数据库在处理过程中已损坏。我加载了备份,检查其编码是否正常,现在再次尝试上述操作。
    • 在这个 [mysql] 论坛中搜索“Mojibake”;我之前以各种方式讨论过细节。也许别的东西会有所帮助。
    • 使用mysqldump时,一定要包含--default-character-set=utf8(或类似的东西)。
    • 一直在尝试各种方法,但没有帮助。奇怪的是,源服务器(wordpress)上的网站显示正确编码,但源服务器上的 phpmyadmin 却没有(Ĺ 而不是 Ł)。
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2014-03-18
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多