除了CHAR
(CHARACTER)
and VARCHAR
(CHARACTER VARYING)
,SQL 还提供了NCHAR
(NATIONAL CHARACTER)
andNVARCHAR
(NATIONAL CHARACTER VARYING)
类型。在某些数据库中,这是用于字符(非二进制)字符串的更好数据类型:
在 SQL Server 中,
NCHAR
以 UTF-16LE 形式存储,并且是可靠存储非 ASCII 字符的唯一方法,仅CHAR
作为单字节代码页;在 Oracle 中,
NVARCHAR
可能存储为 UTF-16 或 UTF-8 而不是单字节排序规则;但是在 MySQL 中,
NVARCHAR
isVARCHAR
没有区别,任何一种类型都可以使用 UTF-8 或任何其他排序规则存储。
那么,NATIONAL
如果有的话,实际上在概念上意味着什么?供应商的文档只告诉您他们自己的 DBMS 使用的字符集,而不是实际的基本原理。同时,SQL92 标准对这个特性的解释更没有帮助,只说明NATIONAL CHARACTER
存储在实现定义的字符集中。CHARACTER
与存储在实现定义的字符集中的单纯相反。这可能是不同的实现定义的字符集。或不。
谢谢,ANSI。坦西。
是否应该NVARCHAR
用于所有字符(非二进制)存储目的?是否有当前流行的 DBMS 会做一些不受欢迎的事情,或者只是不识别关键字(或N''
文字)?