You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Borland Database Engine旧版Pdx ANSI Intl语言驱动文档及排序规则

关于复刻Pdx ANSI Intl排序规则实现SQLite自定义Collate函数的建议

我完全理解你想要匹配Borland Database Engine(BDE)里「Pdx ANSI Intl」排序规则的需求——这套旧驱动的公开文档确实极其稀缺,大部分有用的信息都来自老开发者的经验、归档的工具文档或是逆向工程的结果。下面我整理了一些能帮到你的关键点:

先搞懂Pdx ANSI Intl的核心本质

「Pdx ANSI Intl」是Borland为Paradox数据库(Pdx即Paradox的缩写)设计的国际版ANSI排序驱动,核心基于Windows代码页1252(ANSI Latin-1),但带有几个Borland专属的调整:

  • 非字母数字字符(空格、标点、连字符等)的排序权重极低,排序时会被优先跳过,或者视为与空字符等效
  • 重音字符采用"重音后置"的规则:比如é会紧跟在e之后排序,而非单独占据一个区块
  • 大小写处理默认是大小写不敏感但保留大小写优先级:比如Apple会排在apple前面,但两者的排序位置非常接近(因为基础字母权重相同,大写字母有微小的权重偏移)

寻找参考资料的可行路径

  1. 挖掘旧版Borland工具的离线帮助文档
    早期的Delphi(5/6版本)、Borland C++ Builder或者Paradox桌面版的离线帮助里,会有Paradox排序规则的细节说明,包括「Pdx ANSI Intl」的具体行为。这些归档的帮助文档可以在老开发者的镜像归档、论坛备份里找到。

  2. 逆向现有实现做对比测试
    如果你能找到使用该驱动的旧程序(比如老的Paradox桌面应用,或者用BDE连接Paradox的Delphi程序),可以生成一组测试字符串,用BDE的排序功能得到结果,再逆向推导规则。比如测试这些字符串的排序顺序:

    "Apple", "apple", "Äpple", "Banana", "banana", "banana-", "Banana!", "éclair", "Eclair"
    

    把得到的排序结果作为你实现SQLite Collate函数的基准。

  3. 参考开源BDE兼容项目
    一些开源的BDE替代库(比如第三方Paradox读取工具、旧版DBExpress的开源实现)里,可能包含了对「Pdx ANSI Intl」排序逻辑的代码实现。你可以参考这些代码的字符权重映射、排序逻辑来复刻规则。

SQLite自定义Collate函数的实现思路

  1. 编码转换:先把SQLite的UTF-8字符串转换成Windows 1252编码(因为「Pdx ANSI Intl」基于该代码页),避免字符集不匹配导致的排序偏差。
  2. 字符权重映射:创建一个权重表,给每个1252字符分配对应的排序权重:
    • 字母字符(含重音)的权重基于其基础字母,重音字符加小偏移
    • 数字字符按常规数值权重分配
    • 非字母数字字符设为极低权重,排序时优先跳过
  3. 大小写处理:根据测试得到的基准,决定是否给大写字母添加微小的权重偏移,以匹配「Pdx ANSI Intl」的大小写优先级。
  4. 性能优化:如果是处理大数据量,建议用C/C++实现Collate函数(SQLite原生支持);如果是小数据量,用Python、Java等语言的SQLite绑定实现也可以接受。

内容的提问来源于stack exchange,提问作者nvu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:35:46