GBase 8a
其他
文章

南大通用GBase 8a之按照拼音方式排序的方法(纠正conver( colname using gbk)的错误 )

发表于2025-09-02 14:15:4797次浏览1个评论

1   主要解决问题

(1)在8a中,无论使用utf8  utf8mb4  还是gbk 的方式,都无法准确按照汉语拼音的顺序进行排序。
   这里不说utf8和utf8mb4了,解释一下gbk的方式,一定程度上可以,但也有个别情况,原因不明,如下例:

gbase> select * from han;
+------+
| a    |
+------+
| 赵   |
| 痣   |
| 喆   |
| 准   |
+------+
4 rows in set (Elapsed: 00:00:00.01)

gbase> select * from han order by convert(a using gbk);
+------+
| a    |
+------+
| 喆   |
| 赵   |
| 准   |
| 痣   |
+------+
4 rows in set (Elapsed: 00:00:00.02)

2   部署方式

(1) 直接使用

 ./orderbypy 192.168.1.5 gbase gbase20110531 test pinyin name desc  (参数含义:集群ip,用户名,密码,库名,表名,排序字段名,排序方式)
 
 排序方式: desc 降序  asc 升序

 

3  实现效果

gbase> select * from pinyin;
+------+------+
| id   | name |
+------+------+
|    1 | 张   |
|    2 | 赵   |
|    3 | 郑   |
|    4 | 周   |
|    5 | 朱   |
|    6 | 章   |
|    7 | 甄   |
|    8 | 仲   |
|    9 | 卓   |
|   10 | 詹   |
|   11 | 占   |
|   12 | 战   |
|   13 | 展   |
|   14 | 瞻   |
|   15 | 哲   |
|   16 | 折   |
|   17 | 浙   |
|   18 | 蔗   |
|   19 | 珍   |
|   20 | 真   |
+------+------+
20 rows in set (Elapsed: 00:00:00.01)


[gbase@localhost pinyin]$ ./dist/orderbypy 192.168.1.5 gbase gbase20110531 test pinyin name asc
--------------------------------------------------------------------------------
id      name
--------------------------------------------------------------------------------
10      詹
11      占
12      战
13      展
14      瞻
1       张
6       章
2       赵
15      哲
16      折
17      浙
18      蔗
7       甄
19      珍
20      真
3       郑
8       仲
4       周
5       朱
9       卓

[gbase@localhost pinyin]$ ./dist/orderbypy 192.168.1.5 gbase gbase20110531 test pinyin name desc
--------------------------------------------------------------------------------
id      name
--------------------------------------------------------------------------------
9       卓
5       朱
4       周
8       仲
3       郑
7       甄
19      珍
20      真
15      哲
16      折
17      浙
18      蔗
2       赵
1       张
6       章
10      詹
11      占
12      战
13      展
14      瞻


gbase> select * from han;
+------+
| a    |
+------+
| 赵   |
| 痣   |
| 喆   |
| 准   |
+------+
4 rows in set (Elapsed: 00:00:00.00)

[gbase@localhost pinyin]$  ./dist/orderbypy 192.168.1.5 gbase gbase20110531 test han a asc
--------------------------------------------------------------------------------
a
--------------------------------------------------------------------------------
赵
喆
痣
准

[gbase@localhost pinyin]$ ./dist/orderbypy 192.168.1.5 gbase gbase20110531 test han a desc
--------------------------------------------------------------------------------
a
--------------------------------------------------------------------------------
准
痣
喆
赵

  

5   参考文件 

(1) 注: 该版本为centos8(python2.7)环境下编译。

(2) 文件下载: orderbypy   
          链接: https://pan.baidu.com/s/1Z4xKzxjLcCuqTlHvXxkb1A 提取码: pthn

评论

登录后才可以发表评论
SQL老诗发表于 22天前
ORDER BY比较的是字段的二进制数值,转换为GBK字符集时比较的是该字符串在GBK字符集下的二进制编码,出现的个别情况就是GBK编码与拼音排序不同的情况,这个更大的问题还有多音字的排序,除了人工增加字段维护,似乎未来借助AI可以给出一个完美的解决方案。