在SQL Server中检测Unicode文本

时间:2017-04-16 20:10:25

标签: sql-server unicode

我在SQL Server中存储文本正文。

某些文本正文包含Unicode字符,这些字符在SQL Server中的VARCHAR列中存储时会丢失。

由于只存储了一小部分文本正文需要NVARCHAR列,因此我决定创建2列,一列用于VARCHAR文本,另一列用于NVARCHAR文本。通过这种方式,我可以通过仅在NVARCHAR列中存储Unicode文本正文并将其余部分存储在VARCHAR列中来节省空间。

问题是:如何检测文本正文是否包含Unicode字符,以便我可以确定存储它的最佳列?

1 个答案:

答案 0 :(得分:2)

您可以确定排序规则代码页中可用的256个字符,并检查字符串中是否有该组中没有的字符或将其转换为varchar,然后将其与nvarchar原始字段进行比较。< / p>

如果您使用的是代码页1252,则可以使用

完成第一种方法
DECLARE @String NVARCHAR(MAX) = N'൯'

SELECT CASE
         WHEN @String LIKE '%[^' COLLATE Latin1_General_100_BIN + CHAR(0) + '-' + CHAR(255) + ']%'
           THEN 'varchar not OK'
         ELSE 'varchar OK'
       END 

和第二种方法......

DECLARE @String NVARCHAR(MAX) = N'൯'

SELECT CASE
         WHEN CAST(@String AS VARCHAR(MAX)) = @String
           THEN 'varchar OK'
         ELSE 'varchar not OK'
       END 

BTW:如果你使用行压缩,你也会得到Unicode压缩,这在很大程度上抵消了对此的需求。