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下修改帐号密码 (图文)