SQL:将列中的Unicode数据更新为重音字符

时间:2019-01-11 12:25:51

标签: sql-server sql-server-2012

我有一列设置为Varchar,数据库设置为SQL_Latin1_General_CP1_CI_AS。

当用户在我们的Web前端中输入他们的名字并保存数据时,它没有正确保存带重音符号。

网络用户正在输入以下内容“Béala”,但已将其作为以下内容“Béala”保存在数据库中。

我相信将列从Varchar更改为NVarchar应该可以防止这种情况继续发生?但是,我有两个问题。

1)如何对列中的现有数据执行选择并正确显示?

select CONVERT(NVARCHAR(100),strAddress1) from [dbo].[tblCustomer]

这仍然显示不正确的数据。

2)转换为NVarchar后,如何更新列中的数据以正确保存重音符号?

非常感谢, 雷。

2 个答案:

答案 0 :(得分:0)

我想到的唯一想法是,您必须准备一个更新,该更新将愚弄这些不良加载的数据(即标志) “é”将始终完全匹配一个字符(在这种情况下为“é”),您必须捕获所有特殊字符,并且 如已更改(只是一个简单的案例更新和替换)。当然,第一列必须是nvarchar类型。 它解决了问题1和2(表中的数据正确,数据将正确显示,我在上面描述了更新)

答案 1 :(得分:-1)

这是在普通字符模式下获取它的方法。

select 'Réunion', cast('Réunion' as varchar(100)) COLLATE SQL_Latin1_General_CP1253_CI_AI

此外,要检查SQL Server中所有可能的归类,您可以尝试此查询


SELECT name, description
  FROM sys.fn_helpcollations();