1、

通过使用一个开源的工具pgpinyinsort来实现,使用很简单,参看下README就OK了

http://code.google.com/p/pgpinyinsort/

2、

首选创建一个函数,把text转换为bytea

create or replace function text2bytea(text) returns bytea as
$$
   return $1;
$$ language plpgsql immutable;

然后通过convert函数进行转换
select * from table order by convert(text2bytea(column_need_to_sort_in_utf8),'utf8','gbk');

原因在于,对于文本字段(text, varchar, char类型的字段),PG是使用底层OS的locale相关的函数进行字符串比较的,众所周知,排序的一个重要的事情就是需要字符串比较函数(几乎所有的排序算法都涉及大于、小于、等于等过程)。而遗憾的是,因为各种原因(国家没有投入是一个重要原因),在各种OS上的locale相关的函数集(比如 stroll),对汉字的排序比较都不是很标准;也不是很正确。

怎么解决呢?从根本分析入手,就是要让PG不使用OS的locale相关的东西,这样,解法之一是 initdb 的时候,使用C做locale,这个时候PG会用strcmp,而不是stroll来比较字串大小。但是这样也不一定很好,因为strcmp有时候在某些特殊的编码的时候也会有些问题,并且,我们很多时候也需要locale,比如在中文的全文索引的时候。

那么,有什么办法让PG一定用类似memcp(1)这样的接口来比较数据么?

答案当然是有的:还记得PG有个数据类型是二进制数据类型么?它就是BYTEA,在PG中,所有的变长类型:TEXT、BYTEA、 VARCHAR等的底层结构都是一样的,但是每个类型在SQL子句中调用的OS处理函数不同,比如BYTEA就是使用memcp(1)进行排序的比较的,因此,我们可以想办法把TEXT的类型转换成BYTEA进行ORDER BY,这样就可以即使用locale,又绕开stroll的限制。

3、

在有的OS环境(语言与编码)以及POSTGRESQL版本中,直接使用order by col1...似乎就已经是按照拼音顺序来排序的了

POSTGRESQL按拼音排序相关推荐

  1. postgresql通过拼音排序

    1. 通过使用一个开源的工具pgpinyinsort来实现,使用很简单,参看下README就OK了 http://code.google.com/p/pgpinyinsort/ 2. 首选创建一个函数 ...

  2. PostgreSQL的中文拼音排序

    为什么80%的码农都做不了架构师?>>>    前一段时间开发人员咨询,说postgresql里面想根据一个字段做中文的拼音排序,但是不得其解.So,Take a Loooook. ...

  3. PostgreSQL对汉字按拼音排序

    转自:https://www.cnblogs.com/gaojian/p/3188609.html postgres=# \lList of databasesName | Owner | Encod ...

  4. 常见数据库中文拼音排序及排序对空值的处理

    常见数据库中文拼音排序及排序对空值的处理 1.中文拼音排序 2.排序对空值的处理 1.中文拼音排序 MySQL order by CONVERT (field_name USING GBK ) Pos ...

  5. android中文首字母排序,Android上汉字按拼音排序如何实现?

    具体的代码在 packages\providers\contactsprovider\src\com\android\providers\contacts\ContactL ocaleUtils.ja ...

  6. db2 某个字段排序_db2 中文排序 按拼音排序(utf-8编码)

    需要在建库时指定 数据库整理顺序 表 2. 有效的整理语言环境名称 语言环境名称 语言(区域) 缺省整理属性                                               ...

  7. 汉字转拼音,中文拼音排序器

    汉字转拼音 NSMutableString *ms = [[NSMutableString alloc] initWithString:@"我是中国人"]; if (CFStrin ...

  8. mysql8中文排序_mysql中utf8编码的中文字段按拼音排序

    http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/ 2010-08-24 17:36 by TomorrowMan | 分类: ...

  9. oracle顺序读发散读,Oracle 拼音排序

    Oracle 拼音排序 (2011-04-05 16:07:36) 标签: 杂谈 找了相关的一些资料,都说的不是很清楚,自己也研究了下,终于搞明白了,希望对大家有帮助. 需要说明的是下面的方法需要OR ...

最新文章

  1. java 运算符_java 运算符
  2. CSS是什么及其继承与选择器
  3. PAT-BASIC-1016-部分A+B
  4. [译]震惊!RxJava 5 个不为人知的小秘密
  5. maven项目的pom文件中各标签理解
  6. 关于JS中使用JSON.parse长整型数丢失精度的问题解决
  7. python编程(最简单的rpc代码)
  8. docker 容器和镜像的区别
  9. ES6--阮一峰版笔记
  10. 浅谈Innodb存储结构(Buffer Pool、Double Write Buffer、Change Buffer、Redo log、Undo Log、自适应索引.......)
  11. 斐波那契数列python编程_fibonacci数列-斐波那契数列-python编程
  12. python 入侵服务器_一个入侵iis服务器的简单案例
  13. C# winform Excel导入保存数据两种方法
  14. storm apache java_Apache Storm 示例 Java 拓扑 - Azure HDInsight | Microsoft Docs
  15. 班章管家稳定放心:五万元应该怎样理财?理财产品怎样选?
  16. 工业4.0时代 个性化定制掀起制造业新篇章
  17. 海底的下面究竟有什么?
  18. STM32F1_HAL库用户使用手册UM1850
  19. 如何将iTunes DRM-ed M4P转换为MP3?
  20. AHK 实现中英文输入法自由

热门文章

  1. 经历两个月茫然期后粪发图强,四面美团定级3-1,拿到35*16offer
  2. java web西蒙购物网 ——测试(test)
  3. svn 插件选择 Subclipse与Subversive比较
  4. 网站架构演变_8个观看英语演变的网站
  5. ARM内部大家族详解---嵌入式回归第四篇
  6. flume1.9自定义hbaseSink(实际是自定义序列化类)
  7. 关于全球变暖,你应该知道的事实
  8. wifi网络信息查看
  9. AutoJs学习-实现扫雷
  10. 解决Cleartext HTTP traffic to 01.minipic.eastday.com not permitted