我有点惊讶,因为我能够在varchar
列中存储乌克兰字符串。
我的表是:
create table delete_collation
(
text1 varchar(100) collate SQL_Ukrainian_CP1251_CI_AS
)
并使用此查询我能够插入:
insert into delete_collation
values(N'використовується для вирішення квитки')
但是当我删除'N'
时,它会在select语句中显示??????
。
是否可以,或者我在使用整理理解unicode和非unicode时遗漏了什么?
答案 0 :(得分:4)
来自MSDN:
使用字母
N
添加Unicode字符串常量。没有N
前缀,该字符串将转换为默认代码页 数据库。此默认代码页可能无法识别某些字符。
更新:
请看类似的问题::
What is the meaning of the prefix N in T-SQL statements?
Cyrillic symbols in SQL code are not correctly after insert
sql server 2012 express do not understand Russian letters
答案 1 :(得分:4)
扩展MegaTron的答案:
使用collate SQL_Ukrainian_CP1251_CI_AS
,SQL Server可以使用CodePage 1251在varchar
列中存储乌克兰字符。
但是,当您指定不带N
前缀的字符串时,该字符串将在发送到数据库之前转换为默认的非unicode代码页,这就是您看到??????
的原因
因此,使用varchar
并进行整理是完全正常的,但在向数据库发送字符串时必须始终包含N
前缀,以避免中间转换为默认值(非乌克兰语代码页。