Que tal:
BINARY(16)
Isso deve ser eficaz o suficiente.
Atualmente não há nenhuma função para converter endereços IPv6 textuais de/para binários no servidor MySQL, conforme observado nesse relatório de bug. Você precisa fazer isso em sua aplicação ou possivelmente fazer uma UDF (User-Defined Function) no servidor MySQL para fazer isso.
ATUALIZAÇÃO:
O MySQL 5.6.3 tem suporte para endereços IPv6, veja o seguinte:"INET6_ATON(expr) ".
O tipo de dados é
VARBINARY(16)
em vez de BINARY(16)
como sugeri anteriormente. A única razão para isso é que as funções do MySQL funcionam para endereços IPv6 e IPv4. BINARY(16)
é bom para armazenar apenas endereços IPv6 e economiza um byte. VARBINARY(16)
deve ser usado ao lidar com endereços IPv6 e IPv4. Uma implementação para versões mais antigas do MySQL e MariaDB, consulte o seguinte:"ESTENDENDO MYSQL 5 COM FUNÇÕES IPV6 ".