You know your use for the data, and the IP ranges you will be working with better than anyone else so you will need to consider that along with the answers that you get here. Personally I would say that varchar(20) is wrong because you know that the largest IPv4 address will be NNN.NNN.NNN.NNN which is 15 characters, the smallest could be N.N.N.N but would you store it as that or 00N.00N.00N.00N? If you store it with leading zeros then a char(15) could be better than a varchar(15). Things to consider - will you be wanting to join on subnet values? Will you be searching this table by specific IP address or ranges or will record access be carried out on other column values and the IP address will simply be data that is stored/displayed but not used to search for specific records?