SQL Server 2019 CTP3.0 時点の情報です
SQL Server 2019 の新機能 - SQL Server | Microsoft Docs
見てたら char/varchar でも UTF-8 がサポートされたよーってあったので見てみました。
照合順序と Unicode のサポート - SQL Server | Microsoft Docs
より抜粋
使用されている文字セットによっては、この機能によりストレージを大幅に節約できます。 たとえば、ASCII (ラテン) 文字列の既存の列データ型を、UTF-8 対応の照合順序を使用して NCHAR(10) から CHAR(10) に変更すると、必要なストレージが 50% 削減されます。 このように減るのは、NCHAR(10) を保存するには 20 バイト必要であるのに対し、CHAR(10) では同じ Unicode 文字列に 10 バイトしか必要ないためです。
日本語やとどうやろ?っていうので、
DATALENGTH (Transact-SQL) - SQL Server | Microsoft Docs
でちょっと試しました。
いつもの 森鷗外 です。
create table UTF8照合順序 ( NonUTF8Char varchar(10) collate Japanese_XJIS_140_CI_AS, UTF8Char varchar(10) collate Japanese_XJIS_140_CI_AS_UTF8, NonUTF8NChar nvarchar(10) collate Japanese_XJIS_140_CI_AS, UTF8NChar nvarchar(10) collate Japanese_XJIS_140_CI_AS_UTF8 ) insert into UTF8照合順序 values ('あいう', 'あいう', 'あいう', 'あいう'), (N'森鷗外', N'森鷗外', N'森鷗外', N'森鷗外') select NonUTF8Char, datalength(NonUTF8Char), UTF8Char, datalength(UTF8Char), NonUTF8NChar, datalength(NonUTF8NChar), UTF8NChar, datalength(UTF8NChar) from UTF8照合順序
nvarchar は 2017 から何も変わらないはずで問題無し。
varchar で UTF8 指定していない場合は、当然文字化けでこれもOK。
varchar で UTF8 指定してると、文字化けせずですが、バイト数が nvarchar より増えてる。
使いどころあるかな?