1

我做了这样的备份:

服务器 A:mysqldump --all-databases -u user -ppwd --default-character-set=latin1 > backup.sql

服务器 B : mysql -u user -ppwd --default-character-set=latin1 < backup.sql

但是现在,当我使用 PHP 显示来自 MYSQL 的数据时,我有类似的东西:“Général”。

我的 html 页面是 latin1。我的数据库是 latin1。

如果我把 utf8_decode($mydata); 我得到了正确的结果。如何配置 MYSQL 以使数据库结果为 latin1 ?

从服务器 B:

mysql> SHOW VARIABLES WHERE variable_name like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
4

2 回答 2

3

当您在备份时遇到字符集问题时,您应该尝试以正确的方式执行备份和恢复命令,而不使用 shell 的<or>重定向器,因为该重定向会破坏数据库文本的字符集。

备份

mysqldump -u root -p --opt --all-databases -r backup.sql

恢复

mysql -uuser -p --default-character-set=utf8 database
mysql> SET names 'utf8';
mysql> SOURCE backup.sql;
于 2017-04-19T14:42:39.527 回答
0

您的数据库包含一些使用 utf-8 编码的数据,但您已将其存储在声明为 latin1 的表列中。大概您希望 Général 显示为 Général。

你将不得不修复你的数据来解决这个问题。要查找违规数据,请参阅本文。

如何在 MySQL 中找到非 ASCII 字符?

于 2013-06-22T14:41:59.250 回答