mysqldump之后的MYSQL拉丁1和utf8

mysqldump之后的MYSQL拉丁1和utf8,mysql,utf-8,Mysql,Utf 8,我做了这样的备份: 服务器A: mysqldump--all databases-u user-ppwd--default character set=latin1>backup.sql 服务器B: mysql-u user-ppwd——默认字符集=latin1

我做了这样的备份:

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

服务器B: mysql-u user-ppwd——默认字符集=latin1 但现在,当我用PHP显示MYSQL中的数据时,我得到了如下结果: “Général”

我的html页面是拉丁文1。我的数据库是拉丁文的

如果我把utf8_解码($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)

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

您必须修复数据才能修复此问题。要查找有问题的数据,请参阅本文


当备份中的字符集出现问题时,应尝试以良好的方式执行备份和还原命令,而不使用shell的
重定向程序,因为该重定向会破坏数据库文本的字符集

备份

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;

事实上,当我使用PHPMyAdmin时,我可以在表中看到正确的数据。在表中是“Général”,但当我用PHP脚本显示数据时,会得到“GénÃral”。如果在PHP脚本中输入“utf8_decode()”,则数据显示为“Général”。所以我不认为我的数据必须是固定的。我打赌你不能搜索“Général”并找到那个记录。PhpMyAdmin使用web浏览器显示数据。浏览器将您的数据从编码的拉丁语1(例如général)转换为utf-8,因此它将正确显示您的错误编码数据。php中的utf8_decode()调用也做了同样的事情。试试strlen()。我打赌你会发现长度是6,而不是8。它起作用了,但我也在backup.sql文件中搜索替换了
s/latin1/utf8/
,我还添加了dump
mysqldump--default character set=latin1--set charset