除了
CHAR
(字符)
和 VARCHAR
(可变长度字符)
,SQL 还提供了 NCHAR
(国家字符)
和 NVARCHAR
(国家字符可变长度)
类型。在一些数据库中,这是更好的数据类型来存储字符(非二进制)字符串:
在 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''
文本)的情况?