天天看點

MySQL的幾個character_set變量的說明

參考: http://www.th7.cn/db/mysql/201412/84636.shtml

MySQL關于character有如下8個變量:

character_set_client

character_set_connection

character_set_database

character_set_filesystem

character_set_results

character_set_server

character_set_system

character_sets_dir

結論:

    character_set_client、character_set_connection、character_set_results這3個參數值是由用戶端每次連接配接進來設定的,和伺服器端沒關系。

    我們登陸進mysql後,執行 set names utf8; 實際就是同時修改上面的這3個參數值的。

環境:

    CentOS6.7x86_64

    Percona Server 5.7 (server段設定的是character-set-server= utf8)

在Windows上使用CMD指令行去連接配接node1,如下圖:

<a href="https://s5.51cto.com/wyfs02/M00/91/01/wKioL1jzkWqjFMw-AAAig-BuuFY382.png" target="_blank"></a>

在Windows上使用SQLyog指令行去連接配接node1,如下圖:

<a href="https://s2.51cto.com/wyfs02/M00/91/01/wKioL1jzkWvg80stAAA_btuOlgc242.png" target="_blank"></a>

可以看到2個工具連接配接到同一個伺服器上,顯示出的參數卻不一樣的。

從官方文檔中可以看出character_set_connection、character_set_client、character_set_results三個字元集什麼時候用到。

從實際上可以看到,當用戶端連接配接伺服器的時候,它會将自己想要的字元集名稱發給mysql伺服器,然後伺服器就會使用這個字元集去設定character_set_client、character_set_connection、character_set_results這三個值。如cmd是用gbk,而SQLyog是用utf8.

如果我們想告訴mysql server自己本次連接配接想使用latin1,則指令行下可以如下寫法:

mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1

<a href="https://s4.51cto.com/wyfs02/M01/91/03/wKiom1jzkZiAG52hAAAq1gwuLeo931.png" target="_blank"></a>

此外,要修改上面的3個字元集的話,

還可以在my.cnf的[mysql]段裡面增加:

default-character-set=latin1

也可以登入進去後,執行set names latin1的效果相同。

其他幾個參數:

這個是目前所在的資料庫字元集。如果沒有切換到其他資料庫,則character_set_database顯示的和character_set_server一緻。

例:切換到一個預設是gbk的資料庫裡,執行showvariables like 'character_set_database';看到的就是gbk

把os上檔案名轉化成此字元集,即把 character_set_client轉換character_set_filesystem,預設binary是不做任何轉換的

character_set_system是個隻讀資料不能更改。也沒多少改的意義,他是中繼資料的編碼,相信不會有人用中文做資料庫名和字段名之類的吧,這個字段和具體存儲的資料無關。

不清楚、。。。

本文轉自 lirulei90 51CTO部落格,原文連結:http://blog.51cto.com/lee90/1916511,如需轉載請自行聯系原作者