土耳其语字符上的 Postgres upper 函数未返回预期结果

2023-12-20

看起来像 postgresupper/lower函数不处理土耳其语字符集中的选择字符。

select upper('Aaı'), lower('Aaİ') from mytable;

返回:

AAı, aaİ

代替 :

AAI, aai

请注意,正常的英语字符可以正确转换,但土耳其语 I(小写或大写)不能正确转换

Postgres 版本:9.2 32 bit

数据库编码(其中任何一个结果相同):UTF-8, WIN1254, C

客户端编码:

 UTF-8, WIN1254, C

OS: Windows 7 enterprise edition 64bit

SQL函数lower and upper在 UTF-8 编码数据库上为 ı 和 ï 返回以下相同字节

\xc4b1    
\xc4b0   

以及以下关于 WIN1254(土耳其语)编码数据库的内容

\xfd      
\xdd     

我希望我的调查是错误的,我错过了一些东西。


你的问题is100% 窗户。(或者更准确地说,是 Microsoft Visual Studio,PostgreSQL 是用它构建的。)

作为记录,SQLUPPER最终调用 Windows'LCMapStringW http://msdn.microsoft.com/en-us/library/windows/desktop/dd318700.aspx (via towupper http://msdn.microsoft.com/en-us/library/45119yx3.aspx via ) with almost所有正确的参数(区域设置 1055 土耳其语UTF-8-编码,Turkish_Turkey数据库),

but

Visual Studio 运行时(towupper)不设置LCMAP_LINGUISTIC_CASING http://www.siao2.com/2004/12/11/279942.aspx bit in LCMapStringW's dwMapFlags。 (我可以确认设置它确实有效。)Microsoft 不认为这是一个错误;这是设计使然,可能永远不会被“修复”(噢,遗产的乐趣。)

你有三种方法可以摆脱这种情况:

  • 实现 @Sorrow 的包装解决方案(或编写您自己的本机函数替换(DLL)。)
  • 在例如上运行您的 PostgreSQL 实例乌班图它表现出适合突厥语言环境的正确行为(@Sorrow 确认这对他有效);这可能是最简单、最干净的出路。
  • drop in 已修补的 32 位MSVCR100.DLL在你的 PostgreSQL 中bin目录(但是尽管UPPER and LOWER会起作用,但其他事情(例如排序规则)可能会继续失败——同样是在 Windows 级别。 YMMV。)

为了完整性(和怀旧的乐趣)ONLY,这里是修补 Windows 系统的过程(但请记住,除非您从头到尾管理这个 PostgreSQL 实例,否则您可能会给您的继任者带来很多痛苦;每当从如果您或您的继任者必须记住再次应用补丁——如果有一天您升级到 PostgreSQL 10,则表示使用MSVCR120.DLL代替MSVCR100.DLL,那么您也必须尝试修补新的 DLL。)在测试系统上

  • use HxD http://mh-nexus.de/en/hxd/打开C:\WINDOWS\SYSTEM32\MSVCR100.DLL
  • 立即以相同的名称将 DLL 保存在您的 PostgreSQL 下bin目录(不要尝试使用资源管理器或命令行复制文件,它们可能会复制 64 位版本)
  • with the file still open in HxD, go to Search > Replace, pick Datatype: Hexvalues, then
    • 搜索......4E 14 33 DB 3B CB 0F 84 41 12 00 00 B8 00 01 00 00
    • 用。。。来代替...4E 14 33 DB 3B CB 0F 84 41 12 00 00 B8 00 01 00 01
    • ……然后再一次……
    • 搜索......FC 51 6A 01 8D 4D 08 51 68 00 02 00 00 50 E8 E2
    • 用。。。来代替...FC 51 6A 01 8D 4D 08 51 68 00 02 00 01 50 E8 E2
  • ...and re-save under the PostgreSQL bin directory, then restart PostgreSQL and re-run your query.
    • 如果您的查询仍然不起作用(请确保您的数据库是 UTF-8 编码的Turkish_Turkey对彼此而言LC_CTYPE and LC_COLLATE) open postgres.exe in 32 位依赖项遍历器 http://www.dependencywalker.com并确保它指示已加载MSVCR100.DLL来自 PostgreSQLbin目录。
    • 如果所有函数都正常,则将修补的 DLL 复制到生产 PostgreSQLbin目录并重新启动。

但请记住,当您将数据从 Ubuntu 系统或已修补的 Windows 系统移至未修补的 Windows 系统时,您将再次遇到问题,并且如果 Windows 实例在Acitext场或在UPPER/LOWER基于函数的索引。

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

土耳其语字符上的 Postgres upper 函数未返回预期结果 的相关文章

  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL 中

    我想将以下 json 对象保存到 PostgreSQL 数据库表中as jsonb fname john lname doe 我当前使用 PGObject 创建对象并将类型设置为 jsonb 并将值作为 json 字符串传递 寻找更好的 m
  • Django 中从 sqlite 迁移到 postgresql

    我想迁移自sqlite to PostgreSQL db 我安装了 postgresql 并在其 shell 上创建数据库 然后配置我的 django 设置如下 default ENGINE django db backends postg
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • postgresql 登录到另一个表时发生冲突

    我正在使用 PostgreSQL 9 5 并尝试使用批量插入每天插入数百万行 INSERT INTO tours as cst adults country id price VALUES 3 129 80 2 119 120 on con
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • 如何在 Android TextView 中使用土耳其语字符,如“ş ç ı ö”?

    我想在 android TextView 中写入 ile 但它没有正确绘制 怎样才能使用这样的字符呢 例如 我将文本视图设置为 ile 它显示为 ile 我怎样才能解决这个问题 尝试以下方法 看看是否有帮助 source http grou
  • 为 PostgreSQL 查询选择正确的索引

    简化表 CREATE TABLE products product no integer PRIMARY KEY sales integer status varchar 16 category varchar 16 CREATE INDE
  • TimescaleDB 查询选择列值较上一行发生更改的行

    最近刚刚开始使用 TimescaleDB 和 Postgres 来处理大多数数据请求 然而 我遇到了一个问题 即我对时间序列数据的请求效率极低 它是一个可以是任意时间长度 具有特定整数值的数据系列 大多数时候 除非出现异常 否则该值将是相同
  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • PLpgSQL 函数不返回匹配的标题

    当给定文本时 我试图返回电影名称以及演员和工作人员的数量 当我输入字符串并使用 ilike 时 我的查询返回不匹配的标题 我之前创建了一个视图 其中包含要在函数中输入的电影标题和工作人员数量 我的代码是 create or replace
  • 将自动增量列添加到按日期排序的现有表中

    我在数据库中有一个名为 tickets 的现有表 其中包含以下列 id string Primary Key contains UUID like e6c49164 545a 43a1 845f 73c5163962f2 date bigi
  • PostgreSQL:删除数据库但数据库仍然存在[重复]

    这个问题在这里已经有答案了 我是 PostgreSQL 的新手 我尝试着理解它 我熟悉数据库和MySQL 我正在尝试删除我创建的数据库 因为 psql 似乎忽略了我尝试通过 Django 推送的更改 当我执行时 l我得到以下回复 List
  • JPA 支持查询 Postgres JSON 字段

    JPA 是否已经支持处理 JSON 字段的查询 如下所示 select from person where info gt gt age numeric 40 select from person where info gt gt firs
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1

随机推荐

  • 调用方法后按钮变量变为 null

    在我的主要活动中 我有以下片段 MainActivity class private Button btnx10 Override protected void onCreate Bundle savedInstanceState supe
  • Font Awesome、Bootstrap 和屏幕阅读器辅助功能

    我想知道使用 Twitter Bootstrap 框架和 FontAwesome 图标字体的屏幕阅读器可访问性 我正在考虑两种不同的图标情况 1 该图标具有屏幕阅读器将拾取的帮助文本 a href class btn btn default
  • 为什么 Visual Studio 2008 在 Firefox 中运行缓慢?

    我正在使用 Microsoft Visual Web Developer 2008 Express 我创建了一个 ASP NET MVC 站点 其中 Site Master 文件的 HEAD 元素中有 6 个 CSS 文件和 6 个 Jav
  • 如何使用开始/停止谓词对列表的连续元素进行分组?

    假设我有一个类似的列表 def data a b c d e f g h b d x 和谓词如 defn start x x b defn stop x x d 标记子序列的第一个和最后一个元素 我想返回一个包含子组的列表 如下所示 par
  • 有什么方法可以控制 SqlEntityConnection 上的 AutoDetectChanges 吗?

    本文 http ilmatte wordpress com 2013 01 01 entity framework code first always disable autodetectchanges when importing dat
  • C# EF Linq 按位问题

    好的 例如 我按位使用如下 星期一 1 星期二 2 星期三 4 星期四 8 等 我正在使用业务实体框架类 我正在使用一个类并传递一个像 7 这样的值 星期一 星期二 星期三 我想返回与这些日子匹配的记录 public List
  • C# 回调接收UTF8字符串

    我有一个 C 函数 一个回调 从用 C 编写的 Win32 DLL 调用 调用者给了我一个UTF8字符串 但我无法正确接收它 所有匈牙利特殊字符都出错了 UnmanagedFunctionPointer CallingConvention
  • 如何在ionic 2/3中处理数据库异步操作

    我正在 ionic 中使用数据库 我调用一个 API 该 API 返回一些记录 我必须将这些记录插入数据库以及插入操作何时完成then我想从数据库中调用选择记录 问题是异步行为 在插入操作完成之前调用从数据库中选择记录 谁能帮我解决这个问题
  • 在 PHP 中验证电子邮件地址[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 PHP 中验证电子邮件地址 https stackoverflow com questions 12026842 how to validate an emailaddress in php
  • 如何按工作日顺序(如日历周)而不是按字母顺序(在 C# 中)排序?

    我无法弄清楚如何按日期对独立存储中的 XML 文件中的查询输出进行排序 该日期是 xml 文件中的值 我的意思是它将按当天的第一个字母排序 因此它将返回星期五作为第一个字母 因为其中有 F 但这不是我想要的 相反 它们应该按工作日的顺序排序
  • 从 File.OpenRead() 返回流

    我正在编写一个 WCF 服务 该服务将允许 ASP Net 网站检索文件 基于本文 http msdn microsoft com en us library ms789010 aspx Y912 我的问题是 当我返回流时 它是空白的 为简
  • WordPress wp_localize_script 是做什么的? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以解释一下吗wp localize script 做 即使我在 WP Codex 中读过它 我一开始也不明白它的作用 它允许您通过打
  • 如何在使用插件时将域添加到 next.config.js 的“next/image”

    这是我当前的设置 next config js const withImages require next images module exports withImages webpack config options return con
  • 使用 Promise 在 Node.js + Express 中进行错误处理

    使用 Node js Express 4 Mongoose 使用 Promise 而不是回调 我不知道如何整理我的错误处理 我得到的 相当简化的 是 app get xxx id function request response Xxx
  • 使用reduce在Javascript中构建过滤函数

    在一次采访中 有人向我提出了一个让我摸不着头脑的问题 我不想花周末担心结果 而是想尝试解决问题 但我无法弄清楚 使用下面的reduce函数 构建一个过滤函数 该函数将一个数组和一个测试函数作为参数 并返回一个新数组 该数组已根据测试函数过滤
  • SQL ORDER BY(序列)[重复]

    这个问题在这里已经有答案了 我有一个我想要的sql语句ORDER BY特定的顺序 SELECT FROM UserDB ORDER BY Role 我怎样才能将数据带到我的GridView表从顶部的 管理员 列出 然后是 用户 和 来宾 所
  • 如何在程序中获取 _GLOBAL_OFFSET_TABLE_ 地址?

    我想在我的程序中获取 GLOBAL OFFSET TABLE 的地址 一种方法是使用nm http linux about com library cmd blcmdl1 nm htmLinux 中的命令 可能会将输出重定向到文件并解析该文
  • 传递结构数组时遇到问题

    我一生都无法弄清楚如何在整个程序中传递这个结构数组 有人可以帮忙吗 现在我在 main 中收到一个错误 内容是 标记之前预期的主要表达式 Header ifndef HEADER H INCLUDED define HEADER H INC
  • 处理数据库中的层次结构数据

    我很想知道在数据库设计方面处理层次结构的最佳方法 最佳实践 是什么 这是我通常如何处理它们的一个小例子 节点表 NodeId int PRIMARY KEY NodeParentId int NULL DisplaySeq int NOT
  • 土耳其语字符上的 Postgres upper 函数未返回预期结果

    看起来像 postgresupper lower函数不处理土耳其语字符集中的选择字符 select upper Aa lower Aa from mytable 返回 AA aa 代替 AAI aai 请注意 正常的英语字符可以正确转换 但