为什么字符'£'在SQL Server中更新时会转换为“L”

时间:2013-02-14 14:31:44

标签: sql-server sql-server-2008 character-encoding

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

  

UPDATE dbo.abc SET UrlName ='L£''WHERE abcID = 10;

     

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

我得到的是

“LLLLL”

我查询SELECT @@语言,它是“英国人”。所以不要以为它是关于文化背景的。

有什么想法吗?

1 个答案:

答案 0 :(得分: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;