從此不怕MYSQL字符集的問題

首先給出了字符集和校驗的概念,這對理解後文很重要。》》查閱手冊

可以使用
        mysql> SHOW CHARACTER SET;
對字符集進行查看,種類繁多。

可以使用
        mysql> SHOW COLLATION LIKE 'latin1%';
對latin1字符集校驗進行查看,種類同樣很多,都以$1_$2_$3的形式出現,$1爲使用的字符集,$2爲使用國家,也可能是多國語言general,$3

一般設置爲ci,cs,bin。ci是不區分大小寫的,cs是大小寫敏感的,bin是二原結束

 

 

設置字符集和校驗分爲客戶端和服務器端
服務器端的字符集和校驗可分爲四層,高層服務器字符集和校驗,次高層數據庫字符集和校驗,低層表字符集和校驗,最低層列字符集和校驗

。分別以1,2,3,4代表。
1是在安裝時設置好的,如果默認要改變要重新安裝,但在啓動mysqld的時候可以設置
     shell> mysqld --default-character-set=latin1 /
                --default-collation=latin1_swedish_ci

同時設置character_set_servercollation_server系統變量的值爲上面定義的
2可以在創建時定義,也可以在以後設置
     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]
     CREATE DATABASE db_name    
          DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
設置character_set_databasecollation_database變量的值,如果缺省看看手冊就懂了,很簡單。下面介紹的也一樣
3同上
     CREATE TABLE tbl_name (column_list)    
          [DEFAULT CHARACTER SET charset_name 
          [COLLATE collation_name]] 
     ALTER TABLE tbl_name    
          [DEFAULT CHARACTER SET charset_name] 
          [COLLATE collation_name]

4同上
     col_name {CHAR | VARCHAR | TEXT} (col_length)    
          [CHARACTER SET charset_name [COLLATE collation_name]]
     CREATE TABLE Table1
     (
          column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci
     );

客戶端的連接同樣要設置字符集和校驗,服務器需要知道,你使用的是什麼字符集,服務器接到數據後要轉換成什麼字符集和返回什麼字符集

,如果需要改變可能會丟失字節。服務器使用character_set_client變量作爲客戶端發送的查詢中使用的字符集。服務器使用

character_set_connectioncollation_connection系統變量進行轉換.character_set_results變量指示服務器返回查詢結果到客戶端使用的

字符集。
可以如下設置客戶端字符集
     SET NAMES 'charset_name'
SET NAMES 'x'語句與這三個語句等價:
     mysql> SET character_set_client = x;
     mysql> SET character_set_results = x;
     mysql> SET character_set_connection = x;(
這就是爲啥PHP要設置字符集的原因啦)
一直設置很煩啦,可以在my.ini裏設置
     [mysql]
     default-character-set=utf8

 

 


手冊上還介紹了在查詢時顯示的設置字符集和校驗character_set_connectioncollation_connection的方法不太常用,提一下,詳細看手冊吧
        SELECT _latin1'string' COLLATE latin1_danish_ci;
這是改變校驗的

        SELECT K FROM t1 ORDER BY k COLLATE latin1_german2_ci;

 

 

mysql提供了字符集轉換的函數CONVERT(),CAST()
         CONVERT(expr USING transcoding_name)
         SELECT CONVERT(latin1field USING utf8) FROM latin1table;

 

         CAST(character_string AS character_data_type CHARACTER SET charset_name)
         SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

 

也爲SHOW提供了查看數據庫,表和列的字符集
         mysql> SHOW CREATE DATABASE databasename;
         mysql> SHOW CREATE TABLE tablename;
         mysql> SHOW FULL COLUMNS FORM columnsname/G
;/G看的比較清楚,列不多可以不加啦

上面提供了很多變量可以用SHOW查看
         mysql> SHOW VARIABLES LIKE 'character_set_client';
         mysql> SHOW VARIABLES LIKE 'character_set_system';
這句是查看mysql返回信息的字符集,默認是utf8的

 

 

MYSQL 5.1新特性:mysql分配了一直國際特有字符集,其實就是utf8啦,utf8現在是4字節變長,但在mysql他是3字節存的,所有如果用了

char(10)就表示要分配30個字節,因爲這是最大長度嘛。varchar是變長所以用的字節就少,但有人說char速度快。
 
 新特性就是下面類型聲明是等價的:
 CHAR(10) CHARACTER SET utf8
 NATIONAL CHARACTER(10)
 NCHAR(10)

 
 下面同樣:
 VARCHAR(10) CHARACTER SET utf8
 NATIONAL VARCHAR(10)
 NCHAR VARCHAR(10)
 NATIONAL CHARACTER VARYING(10)
 NATIONAL CHAR VARYING(10)

比較方便啦

 

 


 

發佈了31 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章