首页 > 其他分享 >KingbaseESV8R6汉字首字母排序

KingbaseESV8R6汉字首字母排序

时间:2023-09-18 14:24:25浏览次数:36  
标签:KingbaseESV8R6 en UTF name UTF8 system US 首字母 排序

目的

本文目的实现汉字首字母排序。

排序规则和字符集的关系如下。

select sys_encoding_to_char(collencoding) as encoding,collname,collcollate,collctype from sys_collation ;

按照UTF8字符集匹配中文排序规则如下。

select collcollate from sys_collation where sys_encoding_to_char(collencoding)='UTF8' and collcollate like '%zh%' group by collcollate;

查看test数据库当前字符集为默认字符集UTF8 ,Collate为 en_US.UTF-8,en_US表示英文语言环境,而我们的目的是按照中文排序。

TEST=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges
-----------+--------+----------+-------------+-------------+-------------------
 security  | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 template1 | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 test      | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

(7 rows)

测试

test数据库中测试,指定排序为c无法在汉字字母中识别。

TEST=# \d t3
                          Table "public.t3"
 Column |            Type            | Collation | Nullable | Default
--------+----------------------------+-----------+----------+---------
 id     | integer                    |           |          |
 name   | character varying(20 char) |           |          |

TEST=# select name from t3 order by name;
  name
--------
 不同】
 不好
 偶尔
 啊
 地平
 地方
(6 rows)

TEST=# select name from t3 order by name collate "c";
  name
--------
 不同】
 不好
 偶尔
 啊
 地平
 地方
(6 rows)

在sql后面只需要指定语言环境zh_CN,可实现按汉字首字母排序。

TEST=# select name from t3 order by name collate "zh_CN";
  name
--------
 啊
 不好
 不同】
 地方
 地平
 偶尔
(6 rows)

还可以修改列的collate

但这会导致rewrite table,注意大表请谨慎操作。会耗时很久。

test=# alter table t3 alter name type character varying(20 char) collate "zh_CN";
ALTER TABLE
test=#
test=# select name from t3 order by name;
  name
--------
 啊
 不好
 不同】
 地方
 地平
 偶尔
(6 rows)

GBK字符集数据库环境测试

test1数据库下做测试

TEST=# \l+
                                                                 List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges |  Size  | Tablespace  |                Description

-----------+--------+----------+-------------+-------------+-------------------+--------+-------------+----------------------------------
----------
 security  | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                   | 13 MB  | sys_default |
 template0 | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/system        +| 13 MB  | sys_default | unmodifiable empty database
           |        |          |             |             | system=CTc/system |        |             |
 template1 | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/system        +| 13 MB  | sys_default | default template for new database
           |        |          |             |             | system=CTc/system |        |             |
 test      | system | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                   | 824 MB | sys_default | default administrative connection
 test1     | system | GBK      | zh_CN.GBK   | zh_CN.GBK   |                   | 13 MB  | sys_default |
            |
(7 rows)

TEST=# \c test1 system
You are now connected to database "test1" as user "system".

test1=# \d t1
               Table "public.t1"
 Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+---------
 name   | text |           |          |

因为test1数据库默认排序规则是zh_CN.GBK,所以无需在sql中指定collate即可完成汉字首字母排序。

test1=# select * from t1 order by name;
 name
------
 北大
 的
 个有
 满五
 模拟
 哦平
(6 rows)

总结

如果字符集和collate不相匹配,我们可以在sql中使用collate "zh_CN",或者alter table 修改列的collate,实现汉字首字母排序。

标签:KingbaseESV8R6,en,UTF,name,UTF8,system,US,首字母,排序
From: https://www.cnblogs.com/kingbase/p/17711753.html

相关文章

  • KingbaseESV8R6普通用户无权限执行vacuum
    背景数据库日志有如下提示:WARNING:skipping"pivot_t1"---onlytableordatabaseownercanvacuumit从提示可以看出,有用户对表pivot_t1进行vacuum操作时,出现了权限问题。测试TEST=#\c-ud;Youarenowconnectedtodatabase"TEST"asuser"ud".TEST=>TEST=&g......
  • KingbaseESV8R6用户登录失败自动锁定后解锁遇到权限问题
    测试用户登录失败自动锁定创建用户tee并授权。TEST=#createusertee;CREATEROLETEST=#alteruserteewithcreatedb;ALTERROLETEST=#TEST=#alteruserteewithcreaterole;ALTERROLETEST=#TEST=#alterroleteewithreplication;ALTERROLETEST=#alterus......
  • KingbaseESV8R6识别IO使用率过高
    前言数据库正常运行离不开I/O的使用,在操作系统上,I/O又离不开存储的性能及使用方式,我们可以在存储层利用raid条带化技术使IOPS达到最佳性能。本篇文章有助于确认数据库I/O使用率过高的原因,以及解决方法。确定I/O使用率过高的原因1.需要数据库内置的sys_stat_statements扩展并......
  • KingbaseESV8R6延迟提交参数
    前言队列理论在我们生活中的应用随处可见,例如我们去食堂打饭需要排队,我们生活中随处可见排队的场景。在计算机领域中,性能诊断等地方使用队列理论的案例也很多。服务器硬件分为动态设备和静态设备。CPU和IO子系统属于动态设备,RAM属于静态设备,队列理论只对动态设备适用。Kingbase......
  • KingbaseESV8R6使用kbbench计算连接耗时
    前言本文讨论一下KingbaseESV8R6数据库中如何计算数据库连接耗时。有这样一个场景,不借助第三方工具,在数据库服务端计算1000个数据库连接的总耗时,并取得每个连接耗时的平均值。怎样实现呢?我们可以借助kbbench工具。这是Kingbase数据库自带的一款客户端工具。kbbench介绍kbbench......
  • KingbaseESV8R6中查看索引常用sql
    前言KingbaseES具有丰富的索引功能,对于运行一段时间的数据库,经常需要查看索引的使用大小,使用状态等。尤其重复索引的存在,有时会因为索引过多而造成维护成本加大和减慢数据库的运行速度。下面是经常使用的查看索引的sql。1.查看表上索引个数,是否唯一,表与索引大小。SELECTCO......
  • KingbaseESV8R6全局临时表不能进行reindex操作
    背景我们经常遇到两种情况下会重建索引,reindex1、索引崩溃,由于软件或硬件问题导致索引内数据失效而不可用。2、索引膨胀,当索引膨胀会占用过多磁盘空间,reindex可以解决此问题。对于临时表和全局临时表而言,临时表可以进行reindex操作,而全局临时表不能进行此操作,原因是全局临时表......
  • natsort.natsorted()-用于自然排序(natural sorting)字符串列表。
    参考:https://natsort.readthedocs.io/en/stable/api.html#natsort.natsorted语法格式natsort.natsorted(seq:Iterable[T],key:Optional[Callable[[T],Union[natsort.utils.SupportsDunderLT,natsort.utils.SupportsDunderGT,None]]]=None,reverse:bool=False,alg:......
  • 八大排序算法介绍及其Java实现
    八大排序算法包括:冒泡排序(BubbleSort)选择排序(SelectionSort)插入排序(InsertionSort)希尔排序(ShellSort)归并排序(MergeSort)快速排序(QuickSort)堆排序(HeapSort)计数排序(CountingSort)下面是它们的复杂度、应用场景以及Java语言描述算法:冒泡排序复杂度:最坏情况下需要O(n^2)的时间复......
  • C语言实现选择法排序
    1.选择法排序的思路:假设有一组无序数,扫描一遍数组,找到最小值与数组下标为0的数交换,接着扫描数组,将数组下标为1的数与最小值交换,直至整个数组为有序数组。2.图示:3.代码实现:#include<stdio.h>#definemax10//假设是一个10个数的无序数组intmain(){ inta[max]; for(inti=......