在 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)?

在 MS SQL Server 中检测列更改的最有效方法

SQL Server Express DB 处于“恢复中”-如何检测/知道何时恢复

Sql Server 检测死锁的SQL语句

检测重叠日期并更新最新记录SQL Server 2008

从 sql server 读取数据时检测到自引用循环