SQLServer中的变量是否保留其编码

本文关键字:保留 编码 是否 变量 SQLServer | 更新日期: 2023-09-27 18:23:52

如果我将一个从C#到记录的windows-1252字符串(例如带有"智能引号"的字符串)持久化到SQLServer数据库中,如果我将其读回另一个字符串变量,编码是否会保留?

SQLServer中的变量是否保留其编码

是、否或可能。

SQL Server中的每个VARCHAR列都有一个"排序规则",大致相当于一个代码页(字符集)和一个排序顺序。

如果排序规则的代码页可以存储字符串中的所有字符,那么它们应该正确地往返。如果没有,就没有。

如果您的排序规则是Latin1_General的变体,那么您应该能够存储整个windows-1252字符集。

有关更多信息,请参阅此处:

  • Windows排序规则名称:http://msdn.microsoft.com/en-us/library/ms188046.aspx
  • 校勘与国际术语:http://msdn.microsoft.com/en-us/library/ms143726.aspx
  • Char和Varchar:http://msdn.microsoft.com/en-us/library/ms176089.aspx

请注意,如果您没有对字段设置排序规则,它将使用数据库的默认排序规则,通常为Latin1_General_CI_AS

注意角色集问题是很重要的。如果您需要将字符存储在一个字段中,而这些字段不能全部放入同一代码页,则需要使用NVARCHAR。在NVARCHAR字段中,所有字符都可以存储,排序规则仅控制排序顺序和相等比较。