ものがたり(旧)

atsushieno.hatenablog.com に続く

maybe Maximum size for varchar is still 8064

SQL Serverを使ったことのある人なら、レコード長の最大サイズが8060バイトであることを知っている人も多いのではないかと思う。これと似たような話で、1つのカラムにおける信頼できる文字列長は、(たとえSQL Server 2005でこの8060バイトの壁が破れても)8064文字を超えることはないと思われる。ただし、この前提は、YukonWindowsや.NETのCompareInfoと異なるSortKeyを生成する場合には成り立たないかもしれない。

説明するのがめんどくさいので以下のコードでQEDとする。


void DumpLevel5 (string s) {
byte [] data = new CultureInfo ("")
.CompareInfo.GetSortKey (s).KeyData;
int idx = 0;
for (int i = 0; i < 4; i++, idx++)
for (; data [idx] != 1; idx++)
;
for (; idx < data.Length; idx++)
Console.Write ("{0:X02} ", data [idx]);
Console.WriteLine ();
}

public static void Main ()
{
DumpLevel5 ('-' + new string ('A', 10) + '-');
DumpLevel5 ('-' + new string ('A', 100) + '-');
DumpLevel5 ('-' + new string ('A', 100) + "--B--");
DumpLevel5 ('-' + new string ('A', 1000) + '-');
DumpLevel5 ('-' + new string ('A', 10000) + '-');
DumpLevel5 ('-' + new string ('A', 100000) + '-');
DumpLevel5 ('-' + new string ('A', 1000000) + '-');
}