MySQL ------ 字符集(character set) 和 校對(collate)(三十)


數據表用來存儲和檢索數據,不同的語言和字符集需要以不同的方式存儲和檢索,因此MySQL需要適應不同的字符集(不同的字母和字符),適應不同的排序和檢索數據的方法

由於對於不同的行,使用不同的排序方式會產生不一樣的結果,如obGE,obge,OBGE,在使不使用區分大小寫排序時會產生不同的結果,而且會影響排序和搜索,更何況對於不同國家的字符,因此使用校對很重要。

常用術語:

    字符集:字母和符號的集合

    編碼:某個字符集成員的內部指令

    校隊:規定字符如何比較指令

在MySQL的正常數據庫活動(select、insert等)中,不需要操心太多的東西,使用何種字符集和校對的決定在服務器、數據庫和表級進行。

一、查看MySQL支持眾多的字符集

-- 為查看所支持的字符集完整列表
show character set;

 

上述顯示了所有可用的字符集以及每個字符集的描述和默認校對 

-- 查看可用的校對
 show collation;

 

上述顯示所有可用的校對,以及它們適用的字符集,而且其中有的字符集不止一校對 

通常系統管理在安裝時定義一個默認的字符集和校對。也可以在創建數據庫時,指定默認的字符集和校對。

-- 為了確定所有的字符集和校對
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

 

二、使用字符集和校對順序

實際上,字符集很少是服務器的范圍(甚至數據庫范圍)的設置,不同的表,甚至不同的列都可能需要不同的字符集,而且兩者都可以在創建時指定

one、指定字符集和校對在表的范圍

-- 給表指定字符集和校對 在創建的時候指定 
mysql> create table obge_table
    -> (
    ->  column1 int,
    ->  column2 varchar(10)
    -> )default character set hebrew
    ->  collate hebrew_general_ci; 

上述包含一個兩列的,並且指定了一個字符集合一個校對順序

 

 注意:

1、如果指定CHARACTER SET 和COLLATE 兩者,則使用這些值

2、如果只指定character set ,則使用此字符集及其默認的校對(也就是 show character set 結果中顯示的)

3、如果既不指定character set 也不指定 collater 則使用數據庫默認

 

two、指定字符集和校對在列的范圍

-- 對一個表以及一個特定的列指定了character set 和 collate  
mysql>  create table obgestu.obge_table
    -> (
    ->  columns int,
    ->  column1 varchar(10),
    ->  column2 varchar(10) character set utf8 collate  utf8_general_ci
    -> )default character set hebrew collate hebrew_general_ci; 

 

Three 、在查詢時指定校對順序

校對在對用order by  子句檢索出來的數據排序時起重要的作用,如果需要用與創建表時不同的校對順序  排序特定的select 語句,可以在select 語句自身中進行

latin1 對於不同的歐洲語言有幾種校對,而且許多校對出現兩次,

      一次區分大小寫(由_cs表示),

      一次不區分大小寫由(_ci 表示)

字符集

 

-- 為區分大小寫校對 
 select * from customers order by last_name,first_name collate latin1_general_cs;

select 使用collate 指定一個備用的校對順序,將會影響到結果的排序次序。

注意:

    1、在不區分大小寫的表上進行區分大小寫搜索可以,反之也可以

    2、collate 除了可以在order by 子句中使用外,還可以用於 group by、having、聚集函數、別名等

    3、如果覺得需要可以使用 Cast() 或 Convert() 函數,將 字符集進行轉換

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM