mysqldump之后的MYSQL拉丁1和utf8
我做了这样的备份: 服务器A: mysqldump--all databases-u user-ppwd--default character set=latin1>backup.sql 服务器B: mysql-u user-ppwd——默认字符集=latin1mysqldump之后的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
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/
,我还添加了dumpmysqldump--default character set=latin1--set charset