1. 程式人生 > 其它 >mysql字符集介紹以及對應的校對規則

mysql字符集介紹以及對應的校對規則

字符集是什麼:

  字符集是指一種從二進位制編碼到某類字元符號的對映,每一類編碼字元都有其對應的字符集和校對規則.每種字符集都可能有多種校對規則,並且都有一個預設的校對規則

校對是什麼:

  “校對”是指一組用於某個字符集的排序規則,對於校對規則通常需要考慮的一個問題是,是否以大小寫敏感的方式比較字串,或者是以字串編碼的二進位制值來比較大小。它們對應的校對規則的字首分別是_cs、_ci和_bin,根據需要很容易選擇.

如何檢視:

  可以使用命令SHOW CHARACTER SET和SHOW COLLATION來檢視MySQL支援的字符集和校對規則。

mysql如何比較字串的大小:

  如果比較的兩個字串的字符集不同,MySQL會先將其轉成同一個字符集再進行比較。如果兩個字符集不相容的話,則會丟擲錯誤.這種情況下需要通過函式CONVERT()顯式地將其中一個字串的字符集轉成一個相容的字符集。MySQL 5.0和更新的版本經常會做這樣的隱式轉換,所以這類錯誤通常是在MySQL 4.1中比較常見。

選擇字符集和校對規則:

  結合資料庫中主要儲存的內容,以及校對規則的需要來確定,比如如果儲存的內容基本全是英文字元,那麼可以全部使用UTF-8的字符集,如果需要區分大小寫可以使用_cs結尾的校對規則等

問題1:如果設定的字符集是不區分大小寫的如何讓查詢區分大小寫呢?

兩種方式:1.在查詢的欄位前面加上關鍵字BINARY,例如SELECT * FROM type WHERE BINARY msg_type='alarm';

2.在建表語句中新增關鍵字BINARY,這樣查詢和資料插入也會區分大小寫,例如

CREATE TABLE `name_table` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '配置ID 自增主鍵',
`name_id` VARCHAR(64) BINARY NOT NULL DEFAULT '' COMMENT '姓名ID' ,
`create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '配置建立時間',
`update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '配置更新時間',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `name_id` (`group_id`) USING BTREE
)
COMMENT='姓名配置資訊表'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;

注:utf8mb4_general_ci是不區分英文字元大小寫的utf8字符集,在無法更換的情況下,只能在列中新增關鍵字BINARY來處理.