避免“?” 字符串列中的符号

Ana*_*and 4 sql-server

在我的联系表中,我?LastName 中得到了符号。我怎样才能避免这种情况?

FirstName   MiddleName     LastName
Bjorn       Erik           N?ss
Gunn                       Gjos?ther
Oystein     Larsen         Indrev?r
Louise      Tulle          Pr?strud
Run Code Online (Sandbox Code Playgroud)

Pau*_*ite 12

您需要确保LastName列是 Unicode 类型,例如 nvarchar(30),并在插入/更新/合并语句中使用的任何文字字符串上使用 N 前缀。(或者,您可以使用非 Unicode 类型和支持您需要的所有字符的代码页。)

SQL Server 将无法转换的字符替换为 ? 象征。

请参阅nchar 和 nvarchar (Transact-SQL)

用字母 N 前缀 Unicode 字符串常量。如果没有 N 前缀,字符串将转换为数据库的默认代码页。此默认代码页可能无法识别某些字符。

代码页由排序规则确定。以SQL_Latin1_General_CP1251_CI_AS作为一个例子:

SELECT FH.[description]
FROM sys.fn_helpcollations() AS FH
WHERE FH.name = N'SQL_Latin1_General_CP1251_CI_AS';
Run Code Online (Sandbox Code Playgroud)

输出:

SELECT FH.[description]
FROM sys.fn_helpcollations() AS FH
WHERE FH.name = N'SQL_Latin1_General_CP1251_CI_AS';
Run Code Online (Sandbox Code Playgroud)

代码页 1251(用于该归类中的非 Unicode 数据)没有该æ字符,因此:

SELECT 'Gjøsæther' COLLATE SQL_Latin1_General_CP1251_CI_AS;
Run Code Online (Sandbox Code Playgroud)

产生:

Latin1-General, case-insensitive, accent-sensitive, 
    kanatype-insensitive, width-insensitive for Unicode Data  
SQL Server Sort Order 106 on Code Page 1251 for non-Unicode Data
Run Code Online (Sandbox Code Playgroud)

请注意,除了?,该ø字符还被翻译为o

这个问题没有说明实例/数据库/列正在使用哪种排序规则,但它似乎很可能是您的数据错误的排序规则。

更多一般信息:

数据类型 (Transact-SQL)
整理和 Unicode 支持