MySQL的字符集與字符排序規則

MySQL的字符集與字符排序規則

  • 字符集
    規定存儲的數據編碼格式。
  • 字符排序規則
    在規定的存儲的數據編碼格式下的比較規則,如區分不區分大小寫等

以前開發中常使用的MySQL字符集是utf8,字符排序規則是utf8_general_ci

說明:

  • 常見的字符集有utf8utf8mb4兩種,在MySQL中utf8編碼最多支持3字節的數據,utf8mb4最多支持4個字節的數據,移動端的表情數據是4個字節的字符,所以必須使用utf8mb4格式才能正確的存儲.

  • 常見的字符排序規則有utf_binutf_general_ci兩種,bin 是二進制, a 和 A 會別區別對待.例如你運行:select * from table where a = 'a';那麼在utf8_bin中你就找不到 a = ‘A’ 的那一行, 而 utf8_general_ci 則可以.utf8_general_ci校對速度快,但準確度稍差。(準確度夠用,一般建庫選擇這個

現在的說法是 爲了獲取更好的兼容性,應該總是使用 utf8mb4 而非 utf8. 對於 CHAR 類型數據,utf8mb4 會多消耗一些空間,根據 Mysql 官方建議,使用VARCHAR替代CHAR

查看當前MySQL的字符集與字符排序規則

  1. \s 簡單的查看MySQL的字符集
    在這裏插入圖片描述
  2. SHOW VARIABLES LIKE'%char%' 詳細單的查看MySQL的字符集
    在這裏插入圖片描述
  3. SHOW VARIABLES LIKE'%collation%'詳細單的查看MySQL的字符排序規則
    在這裏插入圖片描述

MySQL的字符集與字符排序規則設置

  • 設置MySQL數據庫的編碼方式有三種,分別是基於session會話的基於全局gloable的永久性改變的

    • session會話級別設置MySQL的字符集與字符排序規則

      • 命令:
        set character_set_database=utf8;
        set character_set_server=utf8;
      • 作用範圍: 本次會話,只在這個命令窗口有效
    • 全局設置MySQL的字符集與字符排序規則

      • 命令:
        set global character_set_database=utf8;
        set global character_ser_server=utf8;
      • 作用範圍: 本次服務有效,重啓服務失效
    • 永久性設置MySQL的字符集與字符排序規則

      • 在MySQL的配置文件my.ini中修改:
      • 作用範圍:永久有效。
      [mysqld]
      character-set-server=utf8 
      [client]
      default-character-set=utf8 
      [mysql]
      default-character-set=utf8

查看某個數據庫的字符集與字符排序規則

  • show create database database_name
    在這裏插入圖片描述
  • use information_schema;
    select * fromSCHEMATAwhereSCHEMA_NAME= 'mytest';
    在這裏插入圖片描述

數據庫或表的字符集與字符排序規則設置

  • MySQL提供了不同級別的設置,包括server級database級table級column級,可以根據具體的需求非常精準的設置具體的編碼。
    • database 級設置
-- 創建數據庫時指定編碼
CREATE DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]
    
-- 修改原有的數據庫編碼
ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]
  • table級設置
 -- 創建數據庫時指定編碼
CREATE DATABASE db_name
     [[DEFAULT] CHARACTER SET charset_name]
     [[DEFAULT] COLLATE collation_name]
      
-- 修改原有表的編碼
ALTER TABLE tbl_name
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]

參考
數據庫字符集和排序規則
utf8和utf8mb4的區分
設置MySQL的字符編碼
再見亂碼:5分鐘讀懂MySQL字符集設置
表字符集和排序規則

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章