Postgres UTF-8 字符排序

2023-11-27

我正在构建一个小型应用程序,其中包含数据库中的世界语单词,因此我有 ĉapelojn 和 brakhorloĝo 等带有“特殊”字符的单词。

使用 PostgreSQL 9.4.4 我有一个words具有以下架构的表:

lingvoj_dev=# \d words
                                      Table "public.words"
   Column    |            Type             |                     Modifiers
-------------+-----------------------------+----------------------------------------------------
 id          | integer                     | not null default nextval('words_id_seq'::regclass)
 translated  | character varying(255)      |
 meaning     | character varying(255)      |
 times_seen  | integer                     |
 inserted_at | timestamp without time zone | not null
 updated_at  | timestamp without time zone | not null
Indexes:
    "words_pkey" PRIMARY KEY, btree (id)

但以下查询给出了一些奇怪的输出:

lingvoj_dev=# SELECT w."translated" FROM "words" AS w ORDER BY w."translated" desc limit 10; 
translated
------------
 ĉu
 ŝi
 ĝi
 ĉevaloj
 ĉapelojn
 ĉapeloj
 ĉambro
 vostojn
 volas
 viro
(10 rows)

顺序不一致 - 我可以接受所有以特殊字符开头的单词放在最后,但所有以 ĉ 开头的单词应该组合在一起,但事实并非如此!为什么 ŝi 和 ĝi 位于 ĉu 和 ĉevaloj 之间?

服务器编码为 UTF8,排序规则为 en_AU.UTF-8。

edit:看起来它对所有特殊字符进行了等效排序 - 它根据每个单词中的第二个字符正确排序。如何让 PostgreSQL 发现 ĉ、ŝ 和 ĝ 不等价?


我可以接受所有以特殊字符开头的单词 处于最后……

使用整理“C”:

SELECT w."translated" 
FROM "words" AS w 
ORDER BY w."translated" collate "C" desc limit 10; 

也可以看看“order by”子句中的不同行为:Oracle 与 PostgreSQL

使用 ORM 时查询可能会出现问题。解决方案可能是使用以下命令重新创建数据库LC_COLLATE = C选项,正如OP在评论中建议的那样。还有一个选项 - 更改单个列的排序规则:

ALTER TABLE "words" ALTER COLUMN "translated" TYPE text COLLATE "C";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres UTF-8 字符排序 的相关文章

随机推荐

  • 上下文版本冲突错误,Google colab

    我正在尝试在 Google colab 上安装并运行 sunpy 它需要 astropy 版本 3 1 或更高版本的软件包 即使在安装 astropy 版本 3 2 1 后 当我导入 sunpy 时 它也会出现以下错误 Contextual
  • Android Activity 的唯一 ID

    我需要获取 Android 活动实例的唯一 ID 我想获取activitymanager在日志中写入的字符串 例如 ActivityManager HistoryRecord的活动暂停超时 450495a0 但我不知道如何得到它 有人知道我
  • 如何从 PHP 压缩或转换为低质量 MP3 文件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何 PHP 库或函数可以将 MP3 文件转换为较低质量 我想通过 PHP 将 128Kbps 或更高质量的 MP3 文件压缩 转换为 64K
  • Javascript:console.log 到 html

    我想将 console log 输出写入 div 层 例如 document write console log 5 1 Incorrect random example 有人可以解决我的问题吗 谢谢 EDIT 我的意思是 例如 conso
  • Passport-local mongoose node.js 支持多种用户类型

    我想要两种类型的用户登录 用户 客户端 我到底如何在 app js 中为这两种类型创建 localStrategies 序列化和反序列化用户 我有两个单独的模式 都使用 PassportLocalMongoose 插件 我目前配置我的护照如
  • 在 Android 中按主页按钮后应用程序被杀死时未打开主活动

    在我的应用程序中 活动 A 是启动器活动 从 A 称为 B 从 B 称为 C 我有超过 5 个活动 在 C 中 当我按下主页按钮 并再次打开我的应用程序时 它会打开 C 这对我来说没问题 但是在按下 C 中的主页按钮后 当它空闲一段时间并且
  • System.exit(0) 没有关闭我的所有活动? [复制]

    这个问题在这里已经有答案了 我有 2 个活动 因此活动 1 转到活动 2 然后在活动 2 上我有一个退出按钮 但是当我点击它时 它只退出了活动2并再次返回到活动1 基本上感觉就像我刚刚再次启动应用程序一样 我不知道为什么 这是我的代码 Bu
  • 在两个 WAR 之间共享应用程序上下文?

    有没有办法在两个部署的战争之间共享应用程序上下文 一场战争需要连接另一场战争的服务 我不知道从哪里开始 我们的团队有相同的要求 在 Tomcat 中的多个 WAR 之间共享 Spring bean 老实说 诸如 不要这样做 之类的答案没有帮
  • 张量流:使用队列运行器有效地馈送评估/训练数据

    我正在尝试运行张量流图来训练模型并使用单独的评估数据集定期进行评估 训练和评估数据都是使用队列运行器实现的 我当前的解决方案是在同一个图中创建两个输入并使用tf cond依赖于一个is training占位符 我的问题通过以下代码突出显示
  • 如何从命令提示符使用 mysqldump 添加日期和时间以及备份文件名称并定义备份文件的路径

    我使用此命令从 mysqldump 进行备份 mysqldump uroot ptrackerdb alldatabases gt test sql 现在我想用我的备份文件添加日期时间 例如当前日期和时间 例如 test 25July201
  • 常见的 Haskell 运算符有可发音的名称吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我正在阅读为大善而学 Haskell 而且我从来不知道 Haskell 运算符
  • ElementClickInterceptedException:消息:元素单击被拦截:元素

    我试图单击 所有主题 和 所有状态 复选框 然后搜索结果 当我运行脚本时 会打开一个大小为 1036x674 的 Chrome 窗口 如果我不理会窗口 则会出现元素单击拦截错误 如果我最小化或最大化窗口 我的脚本就可以正常工作 我正在使用
  • 如何在 python 中的活动连接上启动 TLS?

    以下是我当前在端口 587 上连接到 gmail 的 smtp 服务器的代码 发出 STARTTLS 命令后 我如何完成 TLS 会话协商并开始发出 AUTH LOGIN 和 MAIL FROM 等命令 我省略了 Base64 编码的 gm
  • TestCoroutineDispatcher 和 TestCoroutineScope 均不处理协程测试异常

    使用这个manual测试协程 编写预期抛出异常的测试会导致崩溃 而不是通过测试 我想知道我做错了什么 private val testDispatcher TestCoroutineDispatcher Before fun setup p
  • Python 中的区域交集

    我有一个代码 它采用条件 C 作为输入 并将问题的解决方案计算为 x y 空间上的 允许区域 A 该区域由多个 管 组成 这些 管 由两条永远不会交叉的线定义 我要寻找的最终结果必须满足 k 个条件 C1 Ck 因此是 k 个区域 A1 A
  • 嵌入式环境中的STL

    我是一名 C 程序员 多年来一直听到这样的说法 STL 是not good用于嵌入式环境 因此通常禁止在基于嵌入式环境的项目中使用 我相信像 Boost 这样的 STL 库要强大 得多 并且提供更快 更少出错的开发方式 当然 语法有点吓人
  • iPhone + Twitter API:转换时间?

    有没有一种简单的方法可以将从 twitter 获得的时间戳转换为 UNIX 时间或从现在起的分钟数 我可以解析字符串并自己转换所有内容 但我希望有一种不需要这样做的转换方法 以下是带有时间戳的created at 元素的示例 2007 年
  • android c2dm注册ID

    我阅读了 Android Cloud to Device Messaging Framework 中的解释 当我们的应用程序成功注册到 C2DM 服务器后 我们会收到一个注册 ID 注册 ID 一直有效 直到应用程序明确取消注册 或者直到
  • 软键盘不存在,无法隐藏键盘 - Appium android

    我收到以下异常 org openqa selenium WebDriverException An unknown server side error occurred while processing the command Origin
  • Postgres UTF-8 字符排序

    我正在构建一个小型应用程序 其中包含数据库中的世界语单词 因此我有 apelojn 和 brakhorlo o 等带有 特殊 字符的单词 使用 PostgreSQL 9 4 4 我有一个words具有以下架构的表 lingvoj dev d