【求助】改變 MYSQL 預設語系之問題請教



贊助商連結


b90220208
2005-12-21, 06:09 PM
:confused: 想改變 MYSQL 的預設語系,如下語法參考自官方網站 (http://dev.mysql.com/doc/refman/4.1/en/charset-server.html)
D:\mysql4\bin\mysqld-nt --install MySQL4116 --defaults-file=D:\my.ini --default-character-set=utf8 --default-collation=utf8_general_ci
...但不知為何會啟動不了,而若將後面兩個預設語系的參數移去便能啟動,只是就無法作變更了...

:confused: 另外就是若可改變預設語系成 utf8 ,那麼我原先所有位於資料庫上的資料(Big5)須自行轉換成 utf8 嗎?

環境:
XP
Mysql 4.1.16
Apache/1.3.31
PHP/5.0.1

贊助商連結


ethanliu
2005-12-21, 09:02 PM
charset 皆可在 my.ini 下做設定
應該不是在安裝成服務的階段中執行的

mysqld-nt --install <-- 是在安裝到服務沒錯吧? 很久沒碰 win32平台的mysql

b90220208
2005-12-21, 10:49 PM
charset 皆可在 my.ini 下做設定
應該不是在安裝成服務的階段中執行的

mysqld-nt --install <-- 是在安裝到服務沒錯吧? 很久沒碰 win32平台的mysql
Thanks,是地.

:eek: 那關於--
改變預設語系成 utf8 ,那麼我原先所有位於資料庫上的資料(Big5)須自行轉換成 utf8 嗎?....須考慮此問題嗎,還是它會自行轉換呢?

:eek: 若如下方式設定 my.ini :
(1)在[mysqld]區段中
   default-character-set=utf8
(2)在[client]區段中
   default-character-set=utf8
這是我以前在 mysql 3.23 的方法,不知在 4.1.16 版又該如何設定?

ethanliu
2005-12-23, 04:31 AM
1. 是的,須要先自行轉換
2. 還好,沒有太大差異,我的習慣是

[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
default-collation=utf8_general_ci

b90220208
2005-12-23, 10:50 AM
Thanks# 請問您:
init_connect='SET NAMES utf8' -> 意義上有何作用? :confused:
my.ini 中的 [client] 區塊也要作同樣的設定嗎? :confused:

依您所說我變更了 my.ini 的設定,但,當我執行以下兩個查詢時,發現還有一些仍然維持原來的 big5 字符.
需要全部變更成 utf8 嗎?..(若要,該如何於 my.ini 中設定?) :confused:
mysql> SHOW VARIABLES LIKE 'character_set_%';
character_set_client | big5
character_set_connection | big5
character_set_results | big5

mysql> SHOW VARIABLES LIKE 'collation_%';
collation_connection | big5_chinese_ci

:eek: 順便問一下之前 mysql 沒改成 utf8 時,
當我在 windows xp 下的命令提示字元(command line) 執行查詢時,為何調出來的資料只要是繁體中文字的都變成亂碼? :confused: ...但在browser上瀏覽網頁就正常?
(ps. 我的 moveable type blog 的 code - 即 *.php 都是以 utf8 編碼存檔,meta tag 中也設定了charset=utf-8,所以我想 mt 可能其在 code 中有自行轉碼的機制 )

:eek: 我可否這樣想,因命令提示字元程式預設是以 big5 的方式解碼,所以當調出來的資料是以 utf8 編碼時就變成了亂碼...不知這樣想對不對?

ethanliu
2005-12-23, 01:52 PM
1.
SET NAMES 等於同時設定了
character_set_client
character_set_results
character_set_connection
這三個,這樣才會達到全部與編碼相關的設都全部更改

2.
其實只要下在 [mysqld] 即可,至少我都只有這樣啦 :p
更改之後有記得重新啟動 mysql 嗎?
service mysql restart

3.
其實這會分很多部份來說,很難就單一因素來看
很可能你"以為"你存到mysql的資料是big5編碼,實際上卻是 latin1 編碼
也就是說只要你存/取mysql時所使用的編碼是同一個,解出來的結果就算正確
至於顯示出來時,又跟你顯示的環境有關
wxp 應該可以說是unicode(還是應該說半個unicode)
而browser則直接指定了正確的字元編碼,所以得到你要的正確結果

我沒有實際玩過或看 Movable Type 的原始碼,所以這部份我不敢下任何定論
不過我想是沒有,實際上應該還是上述說明

其實這些設定並不是死的,你也可以程式中去設定這些值,例如
SET NAMES xx
SET CHARACTER_SET_CLIENT=xx
SET CHARACTER_SET_RESULTS=xx


mysql 的說明應該會對你有幫助 :)
http://dev.mysql.com/doc/refman/5.0/en/charset.html

b90220208
2005-12-23, 08:04 PM
您提到當變更語系後,若原先的資料(我有好幾個資料庫 mtblog phpbb ...)為不同的語系則要手動變更,那麼我是否一一下此指令即可? (還是得細分到每個table一一轉換) :eek:
mysql> ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


:eye: 另外,在 my.ini 之 [mysqld] 中設定的 init_connect='SET NAMES utf8' 是不是不包含以 command line 執行 mysql.exe 方式連線進來的 client 端呢? 因為我執行 mysql> show variables; 發現以下三個變數值都沒變成 utf8 !
-----------------------------
character_set_client
character_set_connection
character_set_results
-----------------------------

:eye: 我試了好幾個語系但都看不出來如下設定是反映在哪方面?
[mysql]
default-character-set=utf8

b90220208
2005-12-27, 12:25 PM
:) 如下 6 點是我的設定與測試結果:

1. 所有 *.php 以 utf8 存檔

2. html code 也指定了:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" Content="UTF-8" />

3. mysql> ALTER DATABASE forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

4. mysql> ALTER TABLE forum_table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

5. my.ini 相關設定如下:
[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
default-collation=utf8_general_ci

6. 執行查詢 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

collation_connection | utf8_general_ci
collation_database | utf8_general_ci
collation_server | utf8_general_ci

:eek: [Question]:
為何在 "命令提示字元" 執行查詢
mysql> SET NAMES 'utf8';
mysql> select * from forum_table;
竟出現亂碼 (但在 browser 瀏覽是正確無誤的)
.....請問是我資料庫的編碼轉換沒成功嗎?

ps. 我重新以 browser 瀏覽網站並指定 browser 以 utf8 編碼檢視下再 post 新文章結果也一樣, browser 瀏覽沒問題,但換在 "命令提示字元" 查詢就又變成了亂碼!.....Why?? :eye:

shauronglu
2007-07-12, 03:12 PM
求助 ~ FC3 MySQL 3.x匯入到F7 MySQL 5.x字元集問題
http://forum.icst.org.tw/phpBB2/viewtopic.php?t=12618

有人可以幫忙看看解決嗎 ? THX