在 SQL Server 中检测 UTF-8
Posted
技术标签:
【中文标题】在 SQL Server 中检测 UTF-8【英文标题】:Detecting UTF-8 in SQL Server 【发布时间】:2021-01-24 18:34:47 【问题描述】:我在 C# 中有这个方法:
public static int HasUniCodeCharacter(string text)
return Convert.ToInt32(Regex.IsMatch(text, "[^\u0000-\u00ff]"));
我想知道,如果我想在 SQL 中有一个函数来做这个方法工作,我应该怎么写?
【问题讨论】:
string text
是 UTF-16。除了 u0000-u00ff 范围内的 Unicode 代码点的存在与 UTF-8 的检测无关。请参阅joelonsoftware.com/articles/Unicode.html。
【参考方案1】:
您可以使用 sql 中的一种非 unicode 排序规则来转换字符串,以查看是否返回相同的 tsring,这就是您可以找出它是否是 unicode 字符串的方法。
CREATE FUNCTION IsUnicode (@string AS NVARCHAR(500))
RETURNS INT
AS
BEGIN
RETURN (CASE WHEN CAST(@string AS VARCHAR(MAX)) COLLATE Latin1_General_CI_AI = @string THEN 1 ELSE 0 END)
END
【讨论】:
这很好地表明了 OP actually meant 知道字符串是否可以用某种编码表示(在这种情况下为拉丁语)。这与IsUnicode
不相同。以上是关于在 SQL Server 中检测 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章
sql 检测更新触发器中修改的字段(sql server 2005)?