Как и 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'' литералы)?