1. 程式人生 > >mysql之全球化和本地化:字符集、校對集、中文編碼問題

mysql之全球化和本地化:字符集、校對集、中文編碼問題

語法 必知必會 gin 中文編碼 itl 什麽是 存儲 默認 order


本文內容:

  • 什麽是字符集?什麽是校對集?
  • 查看字符集和校對集
  • 設置字符集和校對集
  • mysql中的中文數據問題

首發日期:2018-04-19


什麽是字符集?什麽是校對集?

  • 字符集是字母和符號的集合,每一個字符編碼都由字符集決定。
  • 校對集是字母和符號的校對標準。校對集影響著字符的排序和搜索。


查看字符集和校對集:

  • 查看mysql支持的字符集:show character set;
    • 技術分享圖片
  • 查看mysql支持的校對集:show collation;
    • 技術分享圖片
  • 查看服務端默認的字符集:show variables like ‘char%‘;
    • 技術分享圖片
  • 查看服務端默認的字符集:show variables like ‘collation%‘;
    • 技術分享圖片

服務端默認的字符集的意義:

技術分享圖片

服務端默認的校對集的意義:

技術分享圖片


設置字符集和校對集

設置數據庫數據表的字符集:

  • 實際上,字符集很少是服務器範圍(甚至數據庫範圍)的設置。不同的表,甚至不同的列都可能需要不同的字符集,而且兩者都可以在創建表時指定【語出mysql必知必會】。下面介紹不使用默認配置來創建數據庫、數據表
    • 創建數據庫:create database 數據庫名 charset 字符集 collate 校對集;【校對集並不是必要的,每一個字符集都有默認的校對集,如果沒有校對集將使用默認的】
      • 技術分享圖片
    • 創建數據表:create table 表名 charset 字符集 collate 校對集;
      • 技術分享圖片
    • 給某一列指定字符集和校對集:技術分享圖片

設置服務端和客戶端的字符集:

  • 語法:set character_set_xxx =字符集; 【character_set_xxx是上面查看字符集中的服務端的各個默認字符集,意義在上面已經標上了】【這種設置是會話級的,僅在當次連接生效。】
  • 如果想要永久修改服務端的字符集:windows下修改my.ini文件【就是mysql的配置文件,可以從mysql服務中查看技術分享圖片在哪】,在mysqld中將character-set-server的值修改為指定的字符集【修改的是服務端的字符集】

補充:

  • 不可永久配置服務端認為客戶端的字符集,每一個連接過來的客戶端的字符集都是不確定的,應該由客戶端設置當次連接的字符集來指定字符集。


mysql中的中文數據問題:

  • mysql中的中文數據問題本質上還是字符集問題,想要識別和存儲中文數據,必須設置能編碼中文的字符集。
  • gbk和utf8都是支持mysql的,一般都是將mysql的字符集更改成utf8來識別中文。
  • 如何配置(以gbk為例):
    • 首先要考慮的一個是:如果你使用命令行模式,默認情況下字符的編碼格式是gbk的,也就是說客戶端的數據編碼是gbk的;
    • 如果服務端要識別客戶端傳來的中文,那麽需要設置服務端認為客戶端的字符集為gbk;set character_set_client =‘gbk‘;
    • 如果服務端要返回中文給客戶端,需要將服務端返回給客戶端的數據的字符集設置為gbk;set character_set_results =‘gbk‘;
    • 對於單次會話,可以直接使用set names = ‘gbk‘;【執行set names= ‘gbk‘就是把character_set_client、character_set_connection、character_set_results這3個參數值都設為gbk】


mysql之全球化和本地化:字符集、校對集、中文編碼問題