Storing a telehone number in some kind of canonical format has several advantages from a programmers point of view, but it might confuse the user, if sudde
Hopefully this is a more practical and applied answer to an old question.
Take a look at https://github.com/googlei18n/libphonenumber.
As @Gumbo alluded to, I would store the phone number as E.164, which the above library parses for you. It can be used from several different programming languages.
For DB storage you could in fact use E.164 as Base64 (since it ironically is valid base64), and decode Base64 as bytes. I believe the number of bytes from a string like that will fit a standard long. Personally I would just store the E.164 as a string in the database though.
Of course, you should probably also store what the user entered originally before parsing, but I highly recommend you enter in some canonical number like E.164 for future integration with other systems.