postgresql 数据库排序混乱不是按照拼音首字母排序

在使用postgresql中发现db默认排序不正确,不是按照首字母排序的

解决方法修改数据库排序的字符集

update pg_database set datcollate='zh_CN.UTF-8', datctype='zh_CN.UTF-8' where datname='test_db'

其他方法

根据 convert_to() 函数输出排序

select * From tb_area order by convert_to(name,'gbk');

测试方法

CREATE TABLE tbl_area ( id character varying(32),name character varying(1024) );

INSERT INTO tbl_area (id,name) VALUES ('000001', '香港');

INSERT INTO tbl_area (id,name) VALUES ('000002', '澳门');

INSERT INTO tbl_area (id,name) VALUES ('0100', '呼和浩特');

INSERT INTO tbl_area (id,name) VALUES ('011200', '苏尼特右旗');

INSERT INTO tbl_area (id,name) VALUES ('011300', '苏尼特左旗');

INSERT INTO tbl_area (id,name) VALUES ('011600', '清水河县');

INSERT INTO tbl_area (id,name) VALUES ('011700', '武川县');

INSERT INTO tbl_area (id,name) VALUES ('0118', '乌兰察布');

INSERT INTO tbl_area (id,name) VALUES ('011800', '四王子旗');

INSERT INTO tbl_area (id,name) VALUES ('012000', '集宁区');

 

select * From tbl_area order by convert_to(name,'gbk');

   id   |    name    

--------+------------

 000002 | 澳门

 0100   | 呼和浩特

 012000 | 集宁区

 011600 | 清水河县

 011800 | 四王子旗

 011200 | 苏尼特右旗

 011300 | 苏尼特左旗

 0118   | 乌兰察布

 011700 | 武川县

 000001 | 香港

 

select * From tbl_area order by name collate "zh_CN.utf8";
   id   |    name   
--------+------------
 000002 | 澳门
 0100   | 呼和浩特
 012000 | 集宁区
 011600 | 清水河县
 011800 | 四王子旗
 011200 | 苏尼特右旗
 011300 | 苏尼特左旗
 0118   | 乌兰察布
 011700 | 武川县
 000001 | 香港

  "zh_CN.utf8" 得到了想要的结果,中文字段排序建议使用 "zh_CN.utf8"  排序规则

参考资料 http://francs3.blog.163.com/blog/static/405767272013521112126587/

来源://作者:/更新时间:2014-11-26
相关文章

最新文章

新热推荐

文章排行