Re: The only thing you can assume
You cannot assume that it is all numbers (1-800-FLOWERS) you cannot assume 3 digit area codes, seven digit numbers, or anything else like that.
Depending on what you are doing you may want to ban letters entirly. Keypad letter to number mappings vary somewhat across countries, and even slighly inside the US.
You can perhaps split out the extension. So you can have country code (3 digits), phone number (I'd provide 20 characters), and an extension - allow 7 characters.
20 is probably over kill, I think the standard limits the country internal part of phone numbers to 10 digits. Even allowing some leway for dashes and space for possible future expansion, 20 is probably excessive. Of course, if your doing the sane thing and dropping it in a varchar there is no reason to limit it at the database level. And on the other hand, for some applications even 20 would not be enough. I use a calling card for long distance calls, if I'm programming that into a system to make outbound calls it's going to be an 800 number, followed by my card number, followed by the actual number I'm trying to dial.
I would make the space for extension longer. I often put the keys to navigate menus in the extension field to keep it handy. With some of the hosting companies I've dealt with it's an extension, followed by mulitple levels of touch pad menu.
I guess the ultimate point here is that it isn't enough to say your storing phone numbers. How much space you need and what you want to allow in the phone number depends partially on what the number is going to used for.
Jay