MySQL字符集概念及設定方法
一、字符集基本概念
1.字元(Character)是指人類語言中最小的表義符號。例如’A'、’B'等;
2.給定一系列字元,對每個字元賦予一個數值,用數值來代表對應的字元,這一數值就是字元的編碼(Encoding)。例如,我們給字元’A'賦予數值0,給字元’B'賦予數值1,則0就是字元’A'的編碼;
3.給定一系列字元並賦予對應的編碼後,所有這些字元和編碼對組成的集合就是字符集(Character Set)。例如,給定字元列表為{’A',’B'}時,{’A'=>0, ‘B’=>1}就是一個字符集;
4.字元序(Collation)是指在同一字符集內字元之間的比較規則;
5.確定字元序後,才能在一個字符集上定義什麼是等價的字元,以及字元之間的大小關係;
6.每個字元序唯一對應一種字符集,但一個字符集可以對應多種字元序,其中有一個是預設字元序(Default Collation);
7.MySQL中的字元序名稱遵從命名慣例:以字元序對應的字符集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結尾。例如:在字元序“utf8_general_ci”下,字元“a”和“A”是等價的;
二、MySQL預設字符集
MySQL對於字符集的指定可以細化到一個資料庫,一張表,一列.傳統的程式在建立資料庫和資料表時並沒有使用那麼複雜的配置,它們用的是預設的配置.
(1)編譯MySQL 時,指定了一個預設的字符集,這個字符集是 latin1;
(2)安裝MySQL 時,可以在配置檔案 (my.ini) 中指定一個預設的的字符集,如果沒指定,這個值繼承自編譯時指定的;
(3)啟動mysqld 時,可以在命令列引數中指定一個預設的的字符集,如果沒指定,這個值繼承自配置檔案中的配置,此時 character_set_server 被設定為這個預設的字符集;
(4)安裝 MySQL選擇多語言支援,安裝程式會自動在配置檔案中把default_character_set 設定為 UTF-8,保證預設情況下所有的資料庫所有表的所有列的都用 UTF-8 儲存。
三、MySQL字符集設定
1.系統變數:
– character_set_server:預設的內部操作字符集
– character_set_client:客戶端來源資料使用的字符集
– character_set_connection:連線層字符集
– character_set_results:查詢結果字符集
– character_set_database:當前選中資料庫的預設字符集
– character_set_system:系統後設資料(欄位名等)字符集
– 還有以collation_開頭的同上面對應的變數,用來描述字元序。
2.用introducer指定文字字串的字符集:
– 格式為:[_charset] ’string’ [COLLATE collation]
– 例如:
SELECT _latin1 ’string’;
SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;
– 由introducer修飾的文字字串在請求過程中不經過多餘的轉碼,直接轉換為內部字符集處理。
四、修改my.cnf設定客戶端與服務端字符集
1.停止MySQL;service mysqld stop
2.備份my.cnf檔案:cp /etc/my.cnf /etc/my.cnf.bak
修改my.cnf
vi /etc/my.cnf
在[client]下新增,client為控制客戶端
default-character-set=utf8
在[mysqld]下新增,mysqld為控制伺服器端
default-character-set=utf8
3.重啟MySQL
spark220:mysqladmin:/usr/local/mysql:>service mysqld restart
4.檢視字符集是否已經修改
mysql>show variables like '%char%';
注:修改配置檔案,並重啟伺服器,才可以永久生效
五、檢測字符集
mysql> SHOW CHARACTER SET;
mysql> SHOW COLLATION;
mysql> SHOW VARIABLES LIKE 'character%';
mysql> SHOW VARIABLES LIKE 'collation%';
mysql> SQL函式HEX、LENGTH、CHAR_LENGTH
mysql> SQL函式CHARSET、COLLATION
MySQL的字符集主要是兩個概念,一個是Character Sets,一個是Collations,前者是字元內容及編碼,後者是對前者進行比較操作的一些規則。這兩個引數集可以在資料庫例項、單個資料庫、表、列等四個級別指定。對於使用者來說,一般推薦使用utf8編碼來儲存資料。而要解決亂碼問題,不單單是MySQL資料的儲存問題,還和使用者的程式檔案的編碼方式、使用者程式和MySQL資料庫的連線方式都有關係。
客戶端的連線是沒有作用的,客戶端這時候一般需要指定utf8方式連線才能避免亂碼。也就是傳說總的set names命令。
set names utf8命令對應的是伺服器端以下幾個命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
注:三個引數是不能寫在配置檔案my.cnf裡的,只能透過set命令來動態修改,但在init_connect裡設定,這個命令在每
個普通使用者連線上來的時候都會觸發執行,可以在[mysqld]部分增加以下一行設定連線字符集:
在[mysqld]下新增:
init_connect = 'SET NAMES utf8'
總結:
1、編譯安裝MySQL的時候指定兩個引數使用utf8編碼。
2、配置檔案my.cnf設定兩個引數,同時設定init_connect引數。
3、配置檔案my.cnf設定兩個引數,同時客戶端的連線指定set names命令。
4、配置檔案my.cnf裡的client和server處加入default-character-set引數方便管理。
若澤大資料交流群:671914634
1.字元(Character)是指人類語言中最小的表義符號。例如’A'、’B'等;
2.給定一系列字元,對每個字元賦予一個數值,用數值來代表對應的字元,這一數值就是字元的編碼(Encoding)。例如,我們給字元’A'賦予數值0,給字元’B'賦予數值1,則0就是字元’A'的編碼;
3.給定一系列字元並賦予對應的編碼後,所有這些字元和編碼對組成的集合就是字符集(Character Set)。例如,給定字元列表為{’A',’B'}時,{’A'=>0, ‘B’=>1}就是一個字符集;
4.字元序(Collation)是指在同一字符集內字元之間的比較規則;
5.確定字元序後,才能在一個字符集上定義什麼是等價的字元,以及字元之間的大小關係;
6.每個字元序唯一對應一種字符集,但一個字符集可以對應多種字元序,其中有一個是預設字元序(Default Collation);
7.MySQL中的字元序名稱遵從命名慣例:以字元序對應的字符集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結尾。例如:在字元序“utf8_general_ci”下,字元“a”和“A”是等價的;
二、MySQL預設字符集
MySQL對於字符集的指定可以細化到一個資料庫,一張表,一列.傳統的程式在建立資料庫和資料表時並沒有使用那麼複雜的配置,它們用的是預設的配置.
(1)編譯MySQL 時,指定了一個預設的字符集,這個字符集是 latin1;
(2)安裝MySQL 時,可以在配置檔案 (my.ini) 中指定一個預設的的字符集,如果沒指定,這個值繼承自編譯時指定的;
(3)啟動mysqld 時,可以在命令列引數中指定一個預設的的字符集,如果沒指定,這個值繼承自配置檔案中的配置,此時 character_set_server 被設定為這個預設的字符集;
(4)安裝 MySQL選擇多語言支援,安裝程式會自動在配置檔案中把default_character_set 設定為 UTF-8,保證預設情況下所有的資料庫所有表的所有列的都用 UTF-8 儲存。
三、MySQL字符集設定
1.系統變數:
– character_set_server:預設的內部操作字符集
– character_set_client:客戶端來源資料使用的字符集
– character_set_connection:連線層字符集
– character_set_results:查詢結果字符集
– character_set_database:當前選中資料庫的預設字符集
– character_set_system:系統後設資料(欄位名等)字符集
– 還有以collation_開頭的同上面對應的變數,用來描述字元序。
2.用introducer指定文字字串的字符集:
– 格式為:[_charset] ’string’ [COLLATE collation]
– 例如:
SELECT _latin1 ’string’;
SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;
– 由introducer修飾的文字字串在請求過程中不經過多餘的轉碼,直接轉換為內部字符集處理。
四、修改my.cnf設定客戶端與服務端字符集
1.停止MySQL;service mysqld stop
2.備份my.cnf檔案:cp /etc/my.cnf /etc/my.cnf.bak
修改my.cnf
vi /etc/my.cnf
在[client]下新增,client為控制客戶端
default-character-set=utf8
在[mysqld]下新增,mysqld為控制伺服器端
default-character-set=utf8
3.重啟MySQL
spark220:mysqladmin:/usr/local/mysql:>service mysqld restart
4.檢視字符集是否已經修改
mysql>show variables like '%char%';
注:修改配置檔案,並重啟伺服器,才可以永久生效
五、檢測字符集
mysql> SHOW CHARACTER SET;
mysql> SHOW COLLATION;
mysql> SHOW VARIABLES LIKE 'character%';
mysql> SHOW VARIABLES LIKE 'collation%';
mysql> SQL函式HEX、LENGTH、CHAR_LENGTH
mysql> SQL函式CHARSET、COLLATION
MySQL的字符集主要是兩個概念,一個是Character Sets,一個是Collations,前者是字元內容及編碼,後者是對前者進行比較操作的一些規則。這兩個引數集可以在資料庫例項、單個資料庫、表、列等四個級別指定。對於使用者來說,一般推薦使用utf8編碼來儲存資料。而要解決亂碼問題,不單單是MySQL資料的儲存問題,還和使用者的程式檔案的編碼方式、使用者程式和MySQL資料庫的連線方式都有關係。
客戶端的連線是沒有作用的,客戶端這時候一般需要指定utf8方式連線才能避免亂碼。也就是傳說總的set names命令。
set names utf8命令對應的是伺服器端以下幾個命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
注:三個引數是不能寫在配置檔案my.cnf裡的,只能透過set命令來動態修改,但在init_connect裡設定,這個命令在每
個普通使用者連線上來的時候都會觸發執行,可以在[mysqld]部分增加以下一行設定連線字符集:
在[mysqld]下新增:
init_connect = 'SET NAMES utf8'
總結:
1、編譯安裝MySQL的時候指定兩個引數使用utf8編碼。
2、配置檔案my.cnf設定兩個引數,同時設定init_connect引數。
3、配置檔案my.cnf設定兩個引數,同時客戶端的連線指定set names命令。
4、配置檔案my.cnf裡的client和server處加入default-character-set引數方便管理。
若澤大資料交流群:671914634
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31511218/viewspace-2149668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於mysql字符集及排序規則設定MySql排序
- MySQL 字符集與亂碼與collation設定的問題?MySql
- MySQL 不同版本預設字符集MySql
- MySQL字元編碼設定方法MySql字元
- MySQL運維實戰(5.6) 字符集設定對mysqldump的影響MySql運維
- MySQL檢視和修改字符集的方法MySql
- linux mysql5.7以上設定中文字符集不在/mysql/my.cnf下面了LinuxMySql
- MySQL字符集MySql
- MySQL修改表預設字符集行為MySql
- MySQL 檢視與修改預設字符集MySql
- Linux字符集環境變數設定Linux變數
- Oracle Linux 7設定中文字符集OracleLinux
- Intellij Idea下設定專案字符集編碼IntelliJIdea
- mysql字符集說明MySql
- mysql字符集和字元排序MySql字元排序
- Mysql資料庫的max_allowed_packet設定方法MySql資料庫
- MySQL表名不區分大小寫的設定方法MySql
- 聊一聊MySQL的字符集MySql
- MySQL5.7 使用者設定密碼解決方法MySql密碼
- 關於mysql查詢字符集不匹配問題的解決方法MySql
- 2020重新出發,MySql基礎,MySql字符集MySql
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- "三高"Mysql - Mysql備份概覽MySql
- mysql 字符集造成的效能問題MySql
- Mysql之儲存引擎及字符集MySql儲存引擎
- mysql如何設定密碼MySql密碼
- 不同字符集倒庫的方法
- PostgreSQL 字符集烏龍導致資料查詢排序的問題,與 MySQL 穩定 "PG不穩定"排序MySql
- MySQL體系結構概覽MySql
- MySQL字符集亂碼與解決方案MySql
- MySQL 關於Table cache設定MySql
- MySQL中的時區設定MySql
- IDEA 設定方法分割線Idea
- javascript設定width的方法JavaScript
- Java 設定睡眠的方法Java
- mysql怎麼設定密碼都不正確的一個解決方法MySql密碼
- 設計模式概論設計模式
- 設計模式概覽設計模式
- windows核心程式設計--字符集Windows程式設計