在传输数据库/服务器时,使用波兰字符集编码错误

时间:2015-09-06 13:39:24

标签: mysql wordpress character-encoding phpmyadmin mojibake

我正在尝试将我的一个数据库从一个主机(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 vars:

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转储导出/导入

我也尝试过使用:

 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编码集的Programers Notepad的转储文件中,字符看起来像这样:

"Ä" instead of "ę"

在微软的单词中打开它我看到了

Ä™ instead of "ę"

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

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

SET NAMES utf8;

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

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

init_connect='SET NAMES utf8'