中文欄位排序(MySQL與PostgreSQL)

來源:互聯網
上載者:User

在MySQL(5.5.8)與PostgreSQL(9.0)中建立相同的測試表、資料:

create table test_gbk_char(
id int,
username varchar(64)
);
insert into test_gbk_char values(1,'青霞'),(2,'曼玉'),(3,'楚紅'); 

 

上述步驟完成之後,檢查兩者之間的字元集及其校正規則:

MySQL(在建表時我沒有指定其校正規則及使用預設校正規則):

+--------------------------+-------------------------------------------------------+| Variable_name            | Value                                                 |+--------------------------+-------------------------------------------------------+| character_set_client     | utf8                                                  || character_set_connection | utf8                                                  || character_set_database   | utf8                                                  || character_set_filesystem | binary                                                || character_set_results    | utf8                                                  || character_set_server     | utf8                                                  || character_set_system     | utf8                                                  |

----------------------------------------------------------------------------------------

| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 | 

 

PostgreSQL:

       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'Chinese (Simplified), Singapore' 

       LC_CTYPE   ='Chinese (Simplified), Singapore'


排序查詢:

MySQL:

select * from test_gbk_char order by username;2曼玉3楚紅1青霞 

PostgreSQL:

select * from test_gbk_char order by username;3;"楚紅"2;"曼玉"1;"青霞"

 

從上面的結果可以看出PostgreSQL給出的結果是我想要的。那麼造成這種差異的原因是什麼呢?其實上文已經給出答案。主要是因為校正規則的不同。

utf8預設的校正規則是utf8_general_ci,它不會按照中文進行排序。如果想要mysql中的結果與PostgreSQL中的結果一樣,有多種方法,比如修改表、欄位字元集校正規則定義,如果不想修改表結構,可以在查詢時進行轉換:

 

select * from test_gbk_char order by CONVERT(username USING gbk) COLLATE gbk_chinese_ci;

 

3楚紅2曼玉1青霞 

註:以上的對比查詢只是為了說明不同字元校正對中文欄位的影響,並不是說mysql與postgreSQL的排序異同。 

 

 

 

 參考:

http://ggsonic.iteye.com/blog/664921 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.