MySQL(4.1以後版本) 服務器中有六個關鍵位置使用了字符集的概念,他們是:client 、connection、database、results、server 、system。MySQL有兩個字符集概念:一個就是字符集本身,一個是字符集校驗規則。字符集影響數據在傳輸和存儲過程中的處理方式,而字符集校驗則影響ORDER BY和GROUP BY這些排序方式。
1.和存儲有關的
服務器字符集 (@@character_set_server)
庫字符集 (@@character_set_database)
表字符集
字段字符集
character_set_server: 服務器安裝時指定的默認字符集設定。
character_set_database: 數據庫服務器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用服務器安裝時指定的字符集設置。
character_system: 數據庫系統使用的字符集設定。
在創建一個表的時候,每個字段只要不是binary,都會有一個字符集。如果不指定,那麼在SHOW CREATE TABLE的時候,它是不會顯示出來的。
建表時候,字段字符集的選取方式如下:
* if 字段指定的字符集
* else if 表指定的字符集
* else if @@character_set_database
* else @@character_set_server (如果沒有設定,這個值爲latin1)
2.和傳輸有關的
@@character_set_connection
@@character_set_results
@@character_set_client
character_set_connection: 連接數據庫的字符集設置類型,如果php沒有指明連接數據庫使用的字符集類型就按照服務器端默認的字符設置
character_set_results: 數據庫給客戶端返回時使用的字符集設定,如果沒有指明,使用服務器默認的字符集
character_set_client: 客戶端使用的字符集,相當於網頁中的字符集設置
3.字符集的校對規則
字符集的校對規則設定分別由上面的character_set_connection, character_set_database, character_set_server決定
collation_connection: 連接字符集的校對規則
collation_database: 默認數據庫使用的校對規則。當默認數據庫改變時服務器則設置該變量。如果沒有默認數據庫,變量的值同collation_server
collation_server: 服務器的默認校對規則
以上內容中character_set_client, character_set_connection, character_set_results 受客戶端默認字符集影響,其中php編譯mysql模塊時的默認字符集同樣也受到它鏈接的mysql動態庫影響,從而影響到php的character_set_connection, character_set_client設定。當默認字符集不是utf8時,設置my.cnf
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
default-character-set只能改變對存儲層(server,database,table,column,system)的設定,對於客戶端和服務器端的通訊層沒有任何影響。
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————————————————————+
| Variable_name | Value |
+————————–+—————————————————————————+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8
解決字符集通訊設置不匹配的方法:
(修改默認的character_set_client,character_set_connection,character_set_result)
1. 重新編譯mysql和php,mysql加入編譯參數 –default-character-set=utf8
2. PHP程序在查詢數據庫之前,執行mysql_query(”set names utf8;”);
3.修改my.cnf,在[mysqld]中加入init-connect=”set names utf8” (對於超級用戶連接該選項無效)
4. 啓動mysqld 加入參數 –skip-character-set-client-handshake 忽略客戶端字符集
mysql字符集設定總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
如何釋放已刪除的InnoDB磁盤空間
lvrenX
2019-02-24 13:04:33
MySQL数据库集群-PXC方案
wy53780
2020-04-23 13:55:07
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
SpringBoot 填坑 (一) | CentOS7.4 環境下,表時間字段默認值設置失效
一個優秀的廢人
2019-02-24 15:33:55
mysql-存儲過程
雙子城
2019-02-24 13:43:57
jmeter學習指南之操作 mysql 數據庫
小強測試
2019-02-24 13:34:06
20190222全天的實驗
清歡難尋
2019-02-24 13:17:21
數據庫監控:zabbix(fpmmm)
AMGYM
2019-02-24 13:05:14
數據庫監控:nagios(check_mysql_health)
AMGYM
2019-02-24 13:05:14
MongoDB索引優化詳解
geekpy
2019-02-24 14:20:06
Sql server中一些Select檢索高級用法
wbzjacky
2019-02-24 13:12:37
將frm,myi,myd文件打包成sql文件
jason1982
2019-02-24 12:57:22