Как и 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
, если что-нибудь? В документах продавцов рассказывается только о том, какие символы используют собственные СУБД, а не о фактическом обосновании. Между тем стандарт SQL92 объясняет эту функцию еще менее благосклонно, заявляя только, что NATIONAL CHARACTER
хранится в наборе символов, определенных реализацией. В отличие от простого CHARACTER
, который хранится в определенном реализацией наборе символов. Каким может быть другой набор символов, определенный реализацией. Или нет.
Спасибо, ANSI. Thansi.
Следует ли использовать NVARCHAR
для всех целей хранения символов (не двоичных)? Существуют ли в настоящее время популярные СУБД, в которых он будет делать что-то нежелательное или которые просто не распознают ключевое слово (или N''
литералы)?