IPv6アドレスをデータベースに保存する際のフォーマットはどうするべきか

IPv4アドレスをデータベースに格納する場合、32bitのunsigned intにする事が多くある。
ではIPv6アドレスの場合はどうするべきか。
 

4桁の[0-9a-f]を:で繋げた省略なしの文字列

データ例:"2001:0db8:0000:0000:1234:0000:0000:9abc"
データ量:39バイト固定
メリット:不等号比較でIPの大小比較が出来る。
デメリット:データ量が大きい。
 

上記表現 + ::省略 + セクション先頭の"0"省略

データ例:"2001:db8::1234:0:0:9abc"
データ量:2〜39バイト可変
デメリット:ベストケースでデータ量が小さくなる。人間にとって見やすい。
デメリット:不等号比較でIPの大小比較が出来ない。
 

16バイトのバイナリ

データ例:" \x01\r\xB8\0\0\0\0\x124\0\0\0\0\x9A\xBC"
データ量:16バイト固定
メリット:データ量が小さくなる。不等号比較でIPの大小比較が出来る。
デメリット:人間にとって見づらい。たかだか16バイトでBlob型。
 

まとめ

128ビットCPU/OSが世の中に普及しない限りIPv6は扱いづらい。
現代に128ビットのアドレス空間は早すぎた。