Manakah tipe data terbaik untuk nomor telepon di MySQL dan seperti apa pemetaan tipe Java untuk nomor telepon tersebut?

Saya menggunakan MySQL dengan template Spring JDBC untuk aplikasi web saya. Saya perlu menyimpan nomor telepon dengan hanya digit (10). Saya sedikit bingung mengenai tipe data yang digunakan.

  1. Apa tipe data yang lebih baik untuk itu di MySQL?
  2. Apa tipe data Java yang seharusnya ada di kelas Bean (POJO) untuk itu?
  3. Bagaimana saya bisa memvalidasi tipe data tersebut dengan javax validations/constrains untuk panjang dan juga hanya digit yang diperbolehkan?

String &; VARCHAR.

  • Jangan coba-coba menyimpan nomor telepon sebagai nomor yang sebenarnya. itu akan merusak format, menghapus 0 sebelumnya dan hal-hal lain yang tidak diinginkan.

  • Anda dapat, jika Anda memilih untuk, membatasi input pengguna hanya untuk nilai numerik tetapi bahkan dalam kasus itu, jaga agar data backing Anda tetap disimpan sebagai karakter/string dan bukan angka.

  • Sadarilah dunia yang lebih luas dan bagaimana panjang dan format angka mereka berbeda sebelum Anda mencoba menerapkan pembatasan panjang, validasi, atau topeng apa pun (misalnya XXX-XXXX-XXXX).

  • Karakter non-numerik dapat valid dalam nomor telepon. Contoh utama adalah + sebagai pengganti 00 di awal nomor internasional.

Diedit dari percakapan di komentar:

  • Ini adalah salah satu kesalahan UI yang lebih besar bahwa nomor telepon ada hubungannya dengan angka. Jauh lebih baik untuk memikirkan dan memperlakukan mereka seperti alamat, itu lebih dekat dengan apa yang sebenarnya dan mewakili daripada telepon "nomor &".
Komentar (8)

Di MySQL -> INT(10) tidak berarti nomor 10-digit, itu berarti integer dengan lebar layar dari 10 digit. Nilai maksimum untuk INT dalam MySQL adalah 2147483647 (atau 4294967295 jika unsigned).

Anda dapat menggunakan BIGINT bukan INT untuk menyimpannya sebagai numerik. Menggunakan BIGINT akan menyelamatkan anda 3 byte per baris atas VARCHAR(10).

Jika anda ingin Menyimpan "Negara + area + nomor secara terpisah". Cobalah menggunakan VARCHAR(20). Hal ini memungkinkan anda kemampuan untuk menyimpan nomor telepon internasional dengan benar, yang harus perlu timbul.

Komentar (0)

Pertimbangkan untuk menggunakan E. 164 format. Penuh dukungan internasional, anda'd perlu VARCHAR 15 digit.

Lihat Twilio's rekomendasi untuk informasi lebih lanjut tentang lokalisasi nomor telepon.

Komentar (1)

anda dapat menggunakan var-char,String,dan int ,itu tergantung pada anda, jika anda hanya menggunakan kode negara dengan nomor ponsel dari anda dapat menggunakan int,jika anda menggunakan format nomor dari menggunakan String atau var-char tipe, jika anda menggunakan var-char maka harus menajiskan ukuran jumlah dan membatasi dari pengguna.

Komentar (0)

VARCHAR dengan panjang mungkin 15-20 akan mencukupi dan akan menjadi pilihan terbaik untuk database. Karena Anda mungkin akan memerlukan berbagai tanda hubung dan tanda plus bersama dengan nomor telepon Anda.

Komentar (0)

It's semua didasarkan pada kebutuhan anda. jika anda sedang mengembangkan skala kecil aplikasi dan hanya mencakup wilayah tertentu (target audience), anda dapat memilih BIGINT untuk menyimpan angka saja sejak VARCHAR mengkonsumsi lebih banyak byte dari BIGINT ( bisa optimal penggunaan memori design matters ). tetapi jika anda mengembangkan skala besar aplikasi dan target pengguna global dan anda memiliki database yang cukup kapasitas untuk menyimpan data, anda pasti dapat memilih VARCHAR.

Komentar (0)

Kebutuhan saya adalah untuk menampilkan 10 digit nomor telepon di jsp. Jadi di sini's setup untuk saya. MySQL: numeric(10)

Jawa Sisi:

@NumberFormat(pattern = "#")  
private long mobileNumber;

dan itu berhasil!

Komentar (0)

Di mysql: BIGINT. Di jawa: Panjang.

Komentar (0)