程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql字符集

mysql字符集

編輯:MySQL綜合教程

mysql字符集


字符集定義了字符的編碼方式,其中比較常見的是ASCII、GBK、UTF8編碼集,所有的編碼集都兼容ASCII字符集。 字符集 是否定長 編碼方式 ASCII 是 單字節7位編碼 GBK 是 雙字節編碼 UTF8 否(變長) 1~4字節編碼 UNICODE編碼一般是兩個字節,可以編碼99%的在用字符,提升了效率和內存空間。對MYSQL來說,UNICODE字符集就是UTF8。

在MYSQL執行explain命令的時候,key_len的長度與字符集有很大的關系。

(1).索引字段的附加信息:可以分為變長和定長數據類型。當索引字段為定長數據類型,比如char,int,datetime,需要有是否為空的標記,這個標記需要占用1個字節;對於變長數據類型,比如:varchar,除了是否為空的標記外,還需要有長度信息,需要占用2個字節(所以變長的數據類型總共需要三個字節的額外信息);(備注:當字段定義為非空的時候,是否為空的標記將不占用字節)

(2).同時還需要考慮表所使用的字符集,不同的字符集,gbk編碼的為一個字符2個字節,utf8編碼的一個字符3個字節;

 


在MYSQL中支持多種字符集,查看mysql支持的字符集 show charater set(或者使用select * from information_schema.character_sets)
\\
\ \ MYSQL的字符集包括字符集(CHARACTER)和校對規則(COLLATION),字符集用來定義MYSQL存儲字符串的方式,校對規則用來定義比較字符串的方式。字符集和校對規則是一對多的關系,每個字符集都至少有一個校對規則(默認校對規則)。

可以使用show collation like 'utf8'查看字符集的校對規則

\

\ 校對規則的命名:字符集的名稱+語言名+後綴。 後綴_ci表示大小寫不敏感,_cs表示大小寫敏感,_bin表示比較是基於字符編碼的值而與language無關。
MYSQL可以支持多種粒度的字符集,粒度從大到小分別是:服務器>數據庫>表>字段。 MYSQL字符集的設置: \
\ 當沒有設定編碼集的時候,默認使用latin1作為服務器編碼集。當在/etc/my.cnf文件中mysqld下面添加character_set_server = utf8後,重啟mysql服務,再次執行命令。 \
\ 數據庫的字符集和校對規則是在創建數據庫的時候指定,也可以在創建數據庫之後使用alter database進行修改。但是注意: 如果數據庫中已經存在數據,因為修改字符集並不能將已有的數據按照新的字符集進行存放,所以不能修改數據庫的字符集直接修改數據的內容。 數據庫的字符集和校對規則: show variables like 'character_set_database' \
\ 數據庫沒有指定字符集和校對規則,則使用MYSQL服務的字符集和該字符集默認的校對規則。也可以使用 create database character_set2 charset gbk collate gbk_chinese_ci來指定字符集和校對規則。
表的字符集和校對規則: 表的字符集和校對規則可以在創建表的時候執行,也可以使用alter table進行修改。同樣,如果表中已有數據,修改字符集不會對原有記錄有影響,不會按照新的字符集進行存放。 如果表沒有設置字符集,那麼會繼承其上一級的字符集。
可以使用show create table來查看。 \\
客戶端和服務器交互的字符集和校對規則的設置 對於客戶端和服務器的交互操作,MYSQL提供了三個不同的參數:character_set_client、character_set_connection、character_set_results,分別代表客戶端,連接和返回結果的字符集。通常情況下,這三個字符集應該是相同點,才可以保證數據被正確的讀出和寫入。
  1. set names xxxx(需要每次都執行)
  2. 在my.cnf中mysql段加入default_character_set=xxxx(永久性改變)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved