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
					        
						顶
							踩
							
					相关文章:
				
				- 解决 Cause: org.postgresql.util.PSQLException: ERR
 - 解决 Error updating database. Cause: org.postgres
 - 解决 Cause: org.postgresql.util.PSQLException: ERR
 - mybatis postgresql insert 添加数据返回主键值
 - 解决 org.postgresql.util.PSQLException: 错误: INSE
 - postgresql 创建序列方法_postgresql create sequence
 - PostgreSQL 替换字符串方法及字符串操作函数
 - postgresql 日期计算,时间加减 方法
 - Navicat for PostgreSQL 10 好用的注册码
 - postgresql windows下修改帐号密码 (图文)
 
