【发布时间】:2011-04-23 03:54:42
【问题描述】:
除了CHAR(CHARACTER)和VARCHAR(CHARACTER VARYING),SQL还提供NCHAR(NATIONAL CHARACTER)和NVARCHAR(NATIONAL CHARACTER VARYING)类型。在某些数据库中,这是用于字符(非二进制)字符串的更好数据类型:
在 SQL Server 中,
NCHAR存储为 UTF-16LE,是可靠存储非 ASCII 字符的唯一方法,CHAR仅是单字节代码页;在 Oracle 中,
NVARCHAR可以存储为 UTF-16 或 UTF-8 而不是单字节排序规则;但在 MySQL 中,
NVARCHAR是VARCHAR,所以没有区别,任何一种类型都可以使用 UTF-8 或任何其他排序规则存储。
那么,NATIONAL 在概念上实际上是什么意思,如果有的话?供应商的文档只告诉您他们自己的 DBMS 使用的字符集,而不是实际的基本原理。同时,SQL92 标准对这个特性的解释就更没有帮助了,只说明NATIONAL CHARACTER 存储在实现定义的字符集中。与仅存储在实现定义的字符集中的CHARACTER 不同。这可能是不同的实现定义的字符集。或者不。
谢谢,ANSI。坦西。
是否应该将NVARCHAR 用于所有字符(非二进制)存储目的?是否有当前流行的 DBMS 会做一些不受欢迎的事情,或者无法识别关键字(或 N'' 文字)?
【问题讨论】:
-
SQL Server 以 UCS-2 编码而不是 UTF-16 存储 NVARCHAR:msdn.microsoft.com/en-us/library/…
-
@bobince,“Thansi”是什么意思?
标签: sql sql-server oracle tsql nvarchar