1

如何让 MSSQL 服务器默认接受 Unicode 数据到 VARCHAR 或 NVARCHAR 列?

我知道你可以通过在要放置在字段中的字符串前面放置一个 N 来做到这一点,但老实说,这在 2008 年似乎有点过时,尤其是使用 SQL Server 2005。

4

4 回答 4

4

N语法是在 SQL Server 中指定 unicode 字符串文字的方式。

N'Unicode string'
'ANSI string'

SQL Server 将尽可能在两者之间自动转换,使用列的排序规则或数据库的排序规则。

因此,如果您的字符串文字实际上不包含 unicode 字符,则无需指定N前缀。

但是,如果您的字符串文字确实包含 unicode 字符,那么使用N前缀是必要的。

于 2008-10-03T14:59:13.397 回答
2

如果这是一个 Web 应用程序,您可能会让您的 Web 服务器使用 UTF8 作为默认编码。这样,所有往返于浏览器的数据都是 UTF8,可以插入到 VARCHAR 字段中。UTF8 是让不知道 Unicode 的应用程序处理它的好方法。

于 2008-10-03T14:45:45.310 回答
2

他们真的需要一种方法来关闭对 ​​N'' 前缀的需求。“向后兼容需要它”参数对我来说是零意义 - 当然,将这种行为作为旧应用程序的默认行为,但为我提供默认打开 Unicode 字符串的选项(即,不需要 N'' 前缀。)我发现我需要去弄乱我的应用程序的大部分区域以适应 SQL Server 上的 Unicode,而这在 Oracle 和 Postgresql 中不是问题。来吧,微软!

于 2009-11-04T23:01:53.337 回答
1

虽然您可以简单地将 UTF8 内容存储在 MSSQL Server 的 VARCHAR 字段中,但前提是未完成字符集转换,但您应该注意:

  1. 您的应用程序之外的任何管理/报告/数据工具都无法理解您的非英语字符。

  2. 特定于语言的处理(例如对名称列表进行排序)可能不会按照每种语言可接受的顺序进行。

  3. 必须小心数据截断。截断多字节 UTF8 字符通常会导致相关字符的数据损坏。如果输入超过字段长度,您应该始终拒绝输入。

  4. 禁用字符集转换可能不像您想象的那么容易。即使您在客户端驱动程序中将其关闭,如果客户端和使用的 RDBMS 代码页之间存在显着的区域设置差异,它仍然可以在某些情况下被覆盖,这会立即导致数据损坏。

  5. 如果您认为这就是全部,您将不得不担心自己自欺欺人。

总而言之,虽然您可能很想走这条路,但它不是一个好主意。多字节时需要更改代码。

于 2008-11-23T21:10:08.430 回答