传输数据库/服务器设置期间波兰语字符集编码错误
Encoding error with polish charset during transfer of database / server seting up
我正在尝试将我的一个数据库从一台主机 (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 export/import。特别是我已经指出在通过 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 "ę"
我看到了用 Microsoft Word 打开它们
Ä™ instead of "ę"
编码转换器 (gżegżółka) 识别出文件位于:
C:\Users\mkondej001\Desktop271425_mk.sql
Kodowanie: Unicode UTF-8
EOL: LF (Unix)
任何关于如何正确传输数据库/设置服务器变量的线索?
SET NAMES utf8;
(默认为latin11,导致Ä™
。)
注意:init_connect
不会为 root
(或任何 SUPER
)用户执行。所以这让你失望了:
init_connect='SET NAMES utf8'
最后我发现问题与我的原始服务器中数据被错误地写入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
希望以上解决方案对其他人也有帮助。
我正在尝试将我的一个数据库从一台主机 (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 export/import。特别是我已经指出在通过 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 "ę"
我看到了用 Microsoft Word 打开它们
Ä™ instead of "ę"
编码转换器 (gżegżółka) 识别出文件位于: C:\Users\mkondej001\Desktop271425_mk.sql
Kodowanie: Unicode UTF-8
EOL: LF (Unix)
任何关于如何正确传输数据库/设置服务器变量的线索?
SET NAMES utf8;
(默认为latin11,导致Ä™
。)
注意:init_connect
不会为 root
(或任何 SUPER
)用户执行。所以这让你失望了:
init_connect='SET NAMES utf8'
最后我发现问题与我的原始服务器中数据被错误地写入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
希望以上解决方案对其他人也有帮助。