3

我的sql很简单。版本:SQL Server 2008

更新 dbo.abc SET UrlName = 'L££££' 其中 abcID = 10;

从 abc 中选择 UrlName,其中 abcID = 10;

我得到的是

“LLLL”

我查询了 SELECT @@language,它是“British”。所以不要认为这与文化设置有关。

有什么想法吗?

4

1 回答 1

2

£不是该代码页中支持的字符之一。

要查看它们,您可以使用

DECLARE @Collations TABLE
(
     code TINYINT PRIMARY KEY,
     Slovenian_CI_AS CHAR(1) COLLATE Slovenian_CI_AS 
);

WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),   --2
        E02(N) AS (SELECT 1 FROM E00 a, E00 b), --4
        E04(N) AS (SELECT 1 FROM E02 a, E02 b), --16
        E08(N) AS (SELECT 1 FROM E04 a, E04 b) --256
INSERT INTO @Collations
            (code)
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1
FROM   E08

UPDATE @Collations
SET    Slovenian_CI_AS = CAST(code AS BINARY(1))

SELECT *
FROM   @Collations 

您将需要更改列排序规则或使用nvarchar而不是varchar.

如果您的数据库排序规则保留在您选择的任何选项,Slovenian_CI_AS您仍然需要向N字符串文字添加一个前缀,以避免它首先被强制到该代码页中。

UPDATE dbo.abc
SET    UrlName = N'L££££'
WHERE  abcID = 10; 
于 2013-02-14T14:50:09.597 回答