SQL:在VARCHAR中存储扩展ASCII(128到255)

时间:2017-06-03 14:04:33

标签: sql sql-server varchar extended-ascii

如何在VARCHAR中存储字符128到255 ..?

SQL似乎将其中一些更改为char(63)'?'。我不确定它是否与整理有关? UTF-8? N '..'?我试过COLLATE Latin1_General_Bin,不确定它是否支持扩展的ascii ..

显然可以使用NVARCHAR,但从理论上说这也适用于VARCHAR ..?

2 个答案:

答案 0 :(得分:3)

存储在ASCII 0-127字符范围之外的varchar / char列中的字符由与排序规则关联的代码页确定。代码页未明确定义的字符被以太网映射到相似的字符,或者当没有时,'?'。

您可以使用此查询列出排序规则以及相关的代码页:

SELECT name, description, COLLATIONPROPERTY(name, 'CodePage') AS CodePage
FROM fn_helpcollations();

答案 1 :(得分:0)

丹的回答让我在写作轨道上。

VARCHAR肯定会存储扩展ASCII,但它取决于与排序规则关联的代码页。我正在使用使用代码页1252的Latin1_General_100_BIN。

https://en.wikipedia.org/wiki/Windows-1252

根据此代码页,以下字符未定义:

129,141,143,144,157

实际上,看起来SQL从128到159排除了大多数字符。简单的解决方案就是删除这些字符。