MySQL開發規範-字符集介紹

字符集(Charset)

是一個系統支持的全部抽象字符的集合。字符是各類文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。
 
MySQL數據庫的字符集:
  • 字符集(CHARACTER) 這個好理解
  • 校對規則(COLLATION) 即排序規則
 
MySQL中常見的字符集:
  • UTF8 (utf8mb4用的比較多一些)
  • LATIN1
  • GBK
 
常見校對規則:
  • ci: 大小寫不敏感
  • cs或bin: 大小寫敏感
 
對於字符集和字符序補充:
什麼是字符集、字符序?簡單的來講:
字符集(character set):定義了字符以及字符的編碼。
字符序(collation):定義了字符的比較規則。
舉個例子:
有四個字符:A、B、a、b,這四個字符的編碼分別是A = 0, B = 1, a = 2, b = 3。這裏的字符 + 編碼就構成了字符集(character set)。
若是咱們想比較兩個字符的大小呢?好比A、B,或者a、b,最直觀的比較方式是採用它們的編碼,好比由於0 < 1,因此 A < B。
另外,對於A、a,雖然它們編碼不一樣,但咱們以爲大小寫字符應該是相等的,也就是說 A == a。
這上面定義了兩條比較規則,這些比較規則的集合就是collation。
一樣是大寫字符、小寫字符,則比較他們的編碼大小;
若是兩個字符爲大小寫關係,則它們相等。

  

咱們可使用如下命令查看:
– show charset;
– show collation;
 
查看當前數據庫支持的字符集,以及其對應的默認校對規則和存儲最大字符長度

 

查看utf8支持的校對規則

 

MySQL字符集級別

服務器端字符集:控制的是,存到mysql中時,字符集控制

客戶端字符集: 控制的是用戶的輸入及顯示

系統字符集: 控制的是系統相關的顯示,和一些依賴於操做系統的應用

在生產中咱們必須保證操做系統、MySQL客戶端實例、MySQL服務器端的字符集保持一致mysql

 

1. 操做系統字符集設置

source /etc/sysconfig/i18n
[root@db02 logs]# echo $LANG
zh_CN.UTF-8

  

2. MySQL實例級別

 
方法1: 在編譯安裝時候就指定以下服務器端字符集

cmake .
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \

 

方法2: 在配置文件中設置sql

[mysqld]
character-set-server=utf8

  

3. Mysql實例客戶端級別

第一種方式:
臨時生效單條命令法
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

  

 
第二種方式:
經過修改my.cnf實現修改mysql客戶端的字符集,配置方法以下。

[client]
default-character-set=utf8

  

注意:若是咱們在建立數據庫或者表時指定好字符集以後,那麼這個數據庫或者表就以建立時指定的字符集爲準,將忽略配置文件中的字符集。
 
建立數據庫
CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */ 
create database oldboy DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE = utf8_general_ci;

  

建立表數據庫

CREATE TABLE `test` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

  

獲取幫助並查詢

help create database;
show character set;

  

若是都沒有作,咱們想要在生產環境中更改數據庫的字符集?

alter database oldboy CHARACTER SET utf8 collate utf8_general_ci;
alter table t1 CHARACTER SET latin1;
注意:更改字符集時,必定要保證由小往大改,後者必須是前者的嚴格超集。生產中別隨便改。必定要反覆確認。
相關文章
相關標籤/搜索