当我创建这样的表时
create table char_test(
item varchar(10) collate SQL_Latin1_General_CP1_CI_AS
)
go
我可以存储包含≥
insert into char_test values ('≥');
当我做一个
select item from char_test;
我得到
item
----------
=
但是使用
select replace(item, '≥', '>=') from char_test;
给
-----------------
>=
所以数据库知道这个字符。如何将字符串转换为显示此字符的 nvarchar?
编辑:
这里的重要事实是,SQL Server 在这里将一些不同的字符映射到相同的字符,而不会引发错误或警告。
我敢说这是非常糟糕的设计。
varchar 不支持
≥
:仅 unicode'≥'
这也包括 varchar的文字这里的排序无关紧要:这是排序和比较,只是以前从未见过!一些更多的 SQL 来使用你的表
编辑:更多播放后
如果您有值,则使用 CP 437
注意:ASCII 是 242 但这不会给出 :-)
您可以通过数据库整理来控制它,但坦率地说使用 unicode ...
如果我运行这个:
它们都返回相同的数字 61。我认为 REPLACE 不能证明该字符已被识别。我什至更改了 char_test 表,将项目列定义为 nvarchar(10),但它仍然无法识别“≥”。
我最好的猜测是您需要不同的排序规则,或者使用与 SSMS 不同的方法插入数据(假设您和我做的一样)。
HTH