POSTGRESQL按拼音排序
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按拼音排序相关推荐
- postgresql通过拼音排序
1. 通过使用一个开源的工具pgpinyinsort来实现,使用很简单,参看下README就OK了 http://code.google.com/p/pgpinyinsort/ 2. 首选创建一个函数 ...
- PostgreSQL的中文拼音排序
为什么80%的码农都做不了架构师?>>> 前一段时间开发人员咨询,说postgresql里面想根据一个字段做中文的拼音排序,但是不得其解.So,Take a Loooook. ...
- PostgreSQL对汉字按拼音排序
转自:https://www.cnblogs.com/gaojian/p/3188609.html postgres=# \lList of databasesName | Owner | Encod ...
- 常见数据库中文拼音排序及排序对空值的处理
常见数据库中文拼音排序及排序对空值的处理 1.中文拼音排序 2.排序对空值的处理 1.中文拼音排序 MySQL order by CONVERT (field_name USING GBK ) Pos ...
- android中文首字母排序,Android上汉字按拼音排序如何实现?
具体的代码在 packages\providers\contactsprovider\src\com\android\providers\contacts\ContactL ocaleUtils.ja ...
- db2 某个字段排序_db2 中文排序 按拼音排序(utf-8编码)
需要在建库时指定 数据库整理顺序 表 2. 有效的整理语言环境名称 语言环境名称 语言(区域) 缺省整理属性 ...
- 汉字转拼音,中文拼音排序器
汉字转拼音 NSMutableString *ms = [[NSMutableString alloc] initWithString:@"我是中国人"]; if (CFStrin ...
- mysql8中文排序_mysql中utf8编码的中文字段按拼音排序
http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/ 2010-08-24 17:36 by TomorrowMan | 分类: ...
- oracle顺序读发散读,Oracle 拼音排序
Oracle 拼音排序 (2011-04-05 16:07:36) 标签: 杂谈 找了相关的一些资料,都说的不是很清楚,自己也研究了下,终于搞明白了,希望对大家有帮助. 需要说明的是下面的方法需要OR ...
最新文章
- java 运算符_java 运算符
- CSS是什么及其继承与选择器
- PAT-BASIC-1016-部分A+B
- [译]震惊!RxJava 5 个不为人知的小秘密
- maven项目的pom文件中各标签理解
- 关于JS中使用JSON.parse长整型数丢失精度的问题解决
- python编程(最简单的rpc代码)
- docker 容器和镜像的区别
- ES6--阮一峰版笔记
- 浅谈Innodb存储结构(Buffer Pool、Double Write Buffer、Change Buffer、Redo log、Undo Log、自适应索引.......)
- 斐波那契数列python编程_fibonacci数列-斐波那契数列-python编程
- python 入侵服务器_一个入侵iis服务器的简单案例
- C# winform Excel导入保存数据两种方法
- storm apache java_Apache Storm 示例 Java 拓扑 - Azure HDInsight | Microsoft Docs
- 班章管家稳定放心:五万元应该怎样理财?理财产品怎样选?
- 工业4.0时代 个性化定制掀起制造业新篇章
- 海底的下面究竟有什么?
- STM32F1_HAL库用户使用手册UM1850
- 如何将iTunes DRM-ed M4P转换为MP3?
- AHK 实现中英文输入法自由
热门文章
- 经历两个月茫然期后粪发图强,四面美团定级3-1,拿到35*16offer
- java web西蒙购物网 ——测试(test)
- svn 插件选择 Subclipse与Subversive比较
- 网站架构演变_8个观看英语演变的网站
- ARM内部大家族详解---嵌入式回归第四篇
- flume1.9自定义hbaseSink(实际是自定义序列化类)
- 关于全球变暖,你应该知道的事实
- wifi网络信息查看
- AutoJs学习-实现扫雷
- 解决Cleartext HTTP traffic to 01.minipic.eastday.com not permitted