參考: 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,如需轉載請自行聯系原作者