在SQL Server中存储多字节

时间:2010-02-19 23:35:14

标签: sql sql-server-2005

SQL Server中用于存储多字节字符的数据类型应该是什么? NVARCHAR或VARCHAR

3 个答案:

答案 0 :(得分:2)

将这些转换为UCS-2 后,它应该是NCHAR或NVARCHAR ... [编辑] ...

在这两种情况下,它都存储Unicode字符(使用UCS-2字符集)。将NCHAR用于具有固定长度(固定字符数)的字段和用于可变长度字段的NVARCHAR。

使用UCS-2的优点是所有支持逻辑都更容易,因为所有字符都需要两个字节才能存储。缺点是如果大多数文本主要使用ASCII字符,则会浪费大量空间。

感谢Remus Rusanu指出多字节字符串与Unicode UCS集不直接兼容。如果你确实说过UTF-8或UTF-16,那么SQL服务器在转换为UCS-2之前不会存储或处理它。

如果只是试图存储这些数据,而不用它搜索等等.VARBINARY格式确实是一件好事。否则,我需要按照我的建议进行转换。 (UCS-2应该处理大多数,但是唉,不是所有的字符集)。

答案 1 :(得分:2)

如果你想存储原始MB字符串,它会变得冒险。你最好的选择实际上是varbinary类型,因为varchar和nvarchar都不是MB字符串的正确类型。

在你的位置我会使用MultiByteToWideChar将MB字符串转换为Unicode并将其存储为NVARCHAR,并且当再次需要thr应用程序时,我会使用WideCharToMultiByte将其从Unicode转换回MB字符串。这样,数据库中的数据对于期望Unicode和/或Ascii字符串的任何其他用途都是一致的,没有那么多用户准备处理存储为字节数组的多字节字符串......

答案 2 :(得分:0)

如果你确实需要,可以将UTF-8存储在varchar字段中,但有很多警告。

  • 没有现成的数据工具 能够正确显示数据 没有明确的转换。

  • 所有字符集翻译必须 在数据驱动程序中禁用。

  • 系统不得接受截断的数据 除非它理解边界。

  • 排序操作可能不正确 对于所有字母表。

如果您没有其他选择并且需要支持UTF8之类的编码而无需重新设计应用程序和架构,则它可以正常工作。适用于输入和输出基于浏览器的Web应用程序。说完这一切之后我还是建议去NVARCHAR并转换为UCS2。