Кроме CHAR
(CHARACTER)
и VARCHAR
(CHARACTER VARYING)
, SQL предлагает тип NCHAR
(НАЦИОНАЛЬНЫЙ СИМВОЛ)
и NVARCHAR
(НАЦИОНАЛЬНЫЙ СИМВОЛ, РАЗЛИЧНЫЙ)
. В некоторых базах данных для символьных (небинарных) строк лучше использовать этот тип данных:
В SQL Server NCHAR
хранится как UTF-16LE и является единственным способом надежного хранения символов, отличных от ASCII, CHAR
является только однобайтовой кодовой страницей;
В Oracle NVARCHAR
может храниться как UTF-16 или UTF-8, а не как однобайтовое сопоставление;
Но в MySQL NVARCHAR
равно VARCHAR
, поэтому нет никакой разницы, любой тип может быть сохранен с помощью UTF-8 или любого другого сопоставления.
Итак, что на самом деле концептуально означает NATIONAL
? В документации поставщиков рассказывается только о том, какие наборы символов используются в их собственных СУБД, а не о фактическом обосновании. Между тем стандарт SQL92 объясняет эту функцию еще менее полезно, заявляя только, что НАЦИОНАЛЬНЫЙ СИМВОЛ
хранится в наборе символов, определяемом реализацией. В отличие от простого CHARACTER
, который хранится в наборе символов, определяемом реализацией. Это может быть другой набор символов, определяемый реализацией. Или нет.
Спасибо, ANSI. Thansi.
Следует ли использовать NVARCHAR
для всех символьных (небинарных) целей хранения? Существуют ли популярные в настоящее время СУБД, в которых они будут делать что-то нежелательное или которые просто не распознают ключевое слово (или литералы N ''
)?