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

SQL Server阿拉伯字母替换异常:尾形ت与ة混淆问题排查

问题根源

你遇到的问题确实是由SQL_Latin1_General_CP1_CI_AS排序规则导致的。这个排序规则针对拉丁字符设计,无法正确区分阿拉伯语中形态相近的字符(比如尾形ة和字母ت),使得REPLACE操作错误地将ت也替换成了ه。

解决方案

在REPLACE操作时显式指定支持阿拉伯语的排序规则,强制SQL Server精确匹配字符:

修改后的函数代码

create or alter function handle_letters(@txt as nvarchar(50))
    returns nvarchar(50)
begin
    set @txt = replace(@txt collate Arabic_CI_AS, N'أ', N'ا');
    set @txt = replace(@txt collate Arabic_CI_AS, N'إ', N'ا');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ى', N'ا');
    set @txt = replace(@txt collate Arabic_CI_AS, N'آ', N'ا');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ؤ', N'ء');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ـ', N'');
    -- 核心修复:指定阿拉伯语排序规则,精准匹配尾形ة
    set @txt = replace(@txt collate Arabic_CI_AS, N'ة', N'ه');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ُ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'َ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ً', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ٌ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ِ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ٍ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ّ', N'');
    set @txt = replace(@txt collate Arabic_CI_AS, N'ئ', N'ء');
    return replace(@txt collate Arabic_CI_AS, N'عبدا', N'عبد ا');
end

可选:二进制排序规则(更严格匹配)

如果需要完全基于Unicode编码值的精准匹配(区分字符形态、大小写),可以使用Arabic_BIN2排序规则,仅在关键替换处指定即可:

set @txt = replace(@txt collate Arabic_BIN2, N'ة', N'ه');
验证结果

修改后执行测试:

  • select dbo.handle_letters(N'كرة') 正常返回 كره
  • select dbo.handle_letters(N'كرات') 将返回正确结果 كرات

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:42:36