學習PHP:詳解mysql4.0以後的編碼配置

來源:互聯網
上載者:User

簡要說一下mysql4.1以後的問題
第一:mysql4.1的儲存方式已經是utf8的了。。也就是說他的檔案編碼是utf8格式,我們不需要擔心會有儲存不了的字元
第二:mysql伺服器需要以一種編碼方式來啟動,設定串連(通訊)過來的字元編碼是什麼,就是所謂的我們的交流語言
第三:mysql的client端,需要設定一種編碼去和mysql的伺服器端通訊,也是交流語言

那麼為什麼回出現亂碼哪?
就是出在這個串連的過程中,試想一個人用英文和你說話,而你只明白中文,真的和小燕子一樣,三塊肉餵了馬吃了。。

那麼如何解決亂碼的問題哪?
有幾個辦法:
第一,伺服器端mysql和用戶端mysql編譯時間候用相同的charset
./configure --with-extra-charsets=big5,gbk,gb2312,utf8 --with-charset=utf8
其中--with-charset=utf8就是設定伺服器或者用戶端的預設串連方式中的編碼,當然你可以用各種編碼,只要統一就可以。
(我感覺這個是嚇唬人的,因為就算你用--with-charset=gbk,在日文或者其他文字中也不會出現亂碼)
第二,在編譯後進行設定,這個也有兩種方式,讀設定檔,或者直接加參數
先說直接加參數的方式:
以下是我用的一個伺服器指令碼,用來啟動mysql

CODE:
#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/usr/local/soft/mysql4112/bin/mysqld_safe --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"\-O max_connection
s=500 -O wait_timeout=60 -O key_buffer=32M --port=6000 --socket="$rundir"/mysql.sock --default-character-set=utf8 &


其中可以看到伺服器啟動的串連編碼為utf8,當然你可以用別的方式比如gbk
用戶端那更容易了
/$mysqlpath/bin/mysql -hxxxx -uxxx -pxxx -P6000 --default-character-set=utf8
呵呵,然後你在mysql中看到mysql>show variables;
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8
說一下參數
character_set_system | utf8 這個是系統的檔案編碼,所有的都是utf8
| character_set_database | utf8 這個就是我們伺服器的啟動的時候設定的編碼
其他幾項是用戶端的串連編碼

然後說通過my.cnf設定的方法,這個也分伺服器和用戶端的方式
編譯的時候我們可以通過--sysconfdir=/etc的方式設定my.cnf的讀取目錄

my.cnf的配置,cnf在client端和server端的設定是一樣的,位置不同
以下是client端my.cnf一腳

CODE:
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8


看一下就明白了,伺服器端同理,不過是在[mysqld]下。

ps:my.cnf的位置是個問題,如果編譯的時候不設定sysconfdir的話,預設是在mysql的安裝目錄下的etc下面,這個目錄需要你自己建一個,使用client端串連既可以讀取。
php有個問題,他的mysql串連不會讀取mysql目錄下的,而是讀取/etc的根目錄中的設定檔,不知道是不是個bug

ps:如何找到適合我自己的my.cnf檔案那,這個是在mysql安裝目錄下的share/mysql/中,其中有
my-small.cnf
my-medium.cnf
my-large.cnf
my-huge.cnf
my-innodb-heavy-4G.cnf
分別對應資料庫的大小設定相應的設定檔,這些設定的不同只對server端起作用。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.