bestlong 怕失憶論壇

標題: MySQL 之編碼篇 [打印本頁]

作者: bestlong    時間: 2006-9-26 09:59     標題: MySQL 之編碼篇

用 MySQL 資料庫最好弄清楚編碼設定的觀念來避免顯示亂碼的問題

OK.蹦's 知識庫
MySQL
http://leexuan.blogbus.com/s6278/

月夜火
MySQL 5 使用 UTF-8 配合 WordPress 的問題
http://moonfire.twbbs.org/17

[encoding] MySQL 4.1.x SET NAMES UTF8
http://blog.dragon2.net/archives/2005/10/24/228.php
作者: bestlong    時間: 2009-5-9 14:07

無論任何 PHP 系統的前端或是後台已經是 UTF-8 的編碼格式
以及 MySQL 的設定檔 my.cnf 是如何的設定
只要是號稱 UTF-8 版本的系統
使用者還是要用指令去檢查 MySQL 連線後的 Server System Variables 狀態
  1. show VARIABLES like 'char%'
複製代碼
正確的結果是要
  1. character_set_client => utf8
  2. character_set_connection => utf8
  3. character_set_database => utf8
  4. character_set_filesystem => binary
  5. character_set_results => utf8
  6. character_set_server => utf8
  7. character_set_system => utf8
  8. character_sets_dir => /usr/share/mysql/charsets/
複製代碼
而不是
  1. character_set_client => latin1
  2. character_set_connection => latin1
  3. character_set_database => utf8
  4. character_set_filesystem => binary
  5. character_set_results => latin1
  6. character_set_server => utf8
  7. character_set_system => utf8
  8. character_sets_dir => /usr/share/mysql/charsets/
複製代碼
另一個簡單的判斷方式就是使用 phpMyAdmin 瀏覽資料庫內的中文資料時不會有亂碼
作者: bestlong    時間: 2010-2-28 12:56

MySQL Service 的設定檔 my.cnf 中有個 init_connect 設定可以讓連線跑參數

可能有人會設定成這樣

[mysqld]
init_connect='SET NAMES utf8'

但是這個參數在使用具有 super 權限的帳號(root 帳號就是)登入時是無效不會執行的
會有這樣的考量是當 init_connect 有錯誤的設定時有可能會導致無 super 權限的一般帳號無法連線

所以最佳的方式還是由 Client 端完成連線驗證後自行執行 SQL 語法 "SET NAMES 'utf8'"




歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/) Powered by Discuz! X1.5