TShopping

標題: PHP & MYSQL語系亂碼問題? [打印本頁]

作者: woff    時間: 2008-12-27 00:49
標題: PHP & MYSQL語系亂碼問題?
一般Linux設定MYSQL的語系是Latin1
可是我網頁PHP預設是UTF8
所以當PHP寫入資料庫時,繁體中文就會變成亂碼
要怎麼處理呢?可以設定下面設定檔
先去資料庫下檢查語法
用下列指令
  1. show variables like 'character_set_%';
複製代碼
會秀出下列訊息
  1. +--------------------------+----------------------------+
  2. | Variable_name | Value |
  3. +--------------------------+----------------------------+
  4. | character_set_client | latin1 |
  5. | character_set_connection | latin1 |
  6. | character_set_database | latin1 |
  7. | character_set_filesystem | binary |
  8. | character_set_results | latin1 |
  9. | character_set_server | latin1 |
  10. | character_set_system | utf8 |
  11. | character_sets_dir | /usr/share/mysql/charsets/ |
  12. +--------------------------+----------------------------+
  13. 8 rows in set (0.00 sec)
複製代碼
方法一.

找到MYSQL的設定檔
一般在 /etc/my.conf
加入下列文字

  1. [mysqld]
  2. init_connect='SET NAMES utf8'
  3. default-character-set=utf8
  4. default-collation=utf8_general_ci
  5. character_set_server=utf8
  6. [mysql]
  7. default-character-set=utf8
複製代碼
並重新啟動MYSQL
/etc/init.d/mysql restart
並去MYSQL下檢查

  1. show variables like 'character_set_%';
複製代碼
看看改成功了嗎?如果設定成UTF8
  1. +--------------------------+----------------------------+
  2. | Variable_name | Value |
  3. +--------------------------+----------------------------+
  4. | character_set_client | utf8 |
  5. | character_set_connection | utf8 |
  6. | character_set_database | utf8 |
  7. | character_set_filesystem | binary |
  8. | character_set_results | utf8 |
  9. | character_set_server | utf8 |
  10. | character_set_system | utf8 |
  11. | character_sets_dir | /usr/share/mysql/charsets/ |
  12. +--------------------------+----------------------------+
  13. 8 rows in set (0.00 sec)
複製代碼
在PHP要寫入資料庫之前設定語法
下達下面指令

  1. //宣告資料庫要寫入的格式
  2.    mysql_query("SET NAMES utf8", $db);
複製代碼
以後PHP寫入就不會亂碼了

方法二.
在PHP要寫入資料庫之前設定語法
下達下面指令

  1. //宣告資料庫要寫入的格式
  2.    mysql_query("SET NAMES Latin1", $db);
複製代碼
再把資料讀出來看看,是不是已經正常了呢!

(p.s 以前建立的資料表因為還是以 latin1 作 default charset,所以無論怎樣讀/寫都還是亂碼,解決方法就是直接重新建立一次。我就是因為太仁慈 (懶?) 沒有 drop 掉舊的資料表,結果怎樣嚐試都失敗,windows platform 試的時候也被 mysql 騙了。)
作者: s0n791006    時間: 2013-11-9 00:59
謝謝版主啊!
作者: 星與月    時間: 2013-11-9 00:59
拿分走人呵呵,樓下繼續!
作者: pinkymini03    時間: 2013-11-9 00:59
努力~~各位。。。  




歡迎光臨 TShopping (http://www.tshopping.com.tw/) Powered by Discuz! X3.2