Как CHAR
(CHARACTER)
и VARCHAR
(CHARACTER VARYING)
, SQL предлагает NCHAR
(NATIONAL CHARACTER)
и NVARCHAR
(NATIONAL CHARACTER VARYING)
типа. В некоторых базах данных, это лучший тип данных использовать для символьных (недвоичных) строк:Что такое тип данных национального характера SQL (NCHAR)?
В 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''
литералов)?
SQL Server хранит NVARCHAR в кодировке UCS-2, а не в UTF-16: http://msdn.microsoft.com/en-us/library/bb330962%28SQL.90%29.aspx#intlftrql2005_topic2 –
@bobince, Что означает «Танси»? – Pacerier
[Надеюсь, это поможет.] (Https://www.youtube.com/watch?v=z2p2Ptv48zg) – bobince