2013-06-22 97 views
0

我做了一個備份這樣的:latin1的MYSQL和UTF8後mysqldump的

服務器A: 的mysqldump - 全數據庫-u用戶-ppwd --default-字符集= LATIN1> backup.sql

服務器B: 的mysql -u用戶-ppwd --default-字符集= LATIN1 < backup.sql

但現在,當我告訴DATAS從MySQL和PHP,我有這樣的事情: 「GA ©NA©拉爾」。

我的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) 

回答

0

你的數據庫包含與UTF-8編碼的一些數據,但你已經存儲在它宣佈要處理latin1表列。想必Général顯示爲Général。

你將不得不修復你的數據來解決這個問題。要查找有問題的數據,請參閱此文章。

How can I find non-ASCII characters in MySQL?

+0

事實上,當我使用phpMyAdmin,我可以看到在表中正確的數據。 在表中它是「Général」,但是當我用我的PHP腳本顯示數據時,我得到了「Général」。如果在PHP腳本中輸入「utf8_decode()」,則數據顯示爲「Général」。 所以我不認爲我的數據必須修復。 – user2511827

+0

我敢打賭,你不能搜索「Général」並找到該記錄。 PhpMyAdmin使用網絡瀏覽器來顯示您的數據。瀏覽器將您的數據從編碼的latin1(例如Généal)轉換爲utf-8,因此它會正確顯示錯誤編碼的數據。在php中的utf8_decode()調用做同樣的事情。嘗試strlen()。我敢打賭,你發現長度是6,而不是8。 –

0

當你對備份的字符集的問題,你應該嘗試做備份,並在好辦法恢復命令,不使用外殼的<>轉向器因爲重定向可以打破字符設置數據庫文本。

備份

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;