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.
- Apa tipe data yang lebih baik untuk itu di MySQL?
- Apa tipe data Java yang seharusnya ada di kelas Bean (POJO) untuk itu?
- Bagaimana saya bisa memvalidasi tipe data tersebut dengan javax validations/constrains untuk panjang dan juga hanya digit yang diperbolehkan?
49
9
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 pengganti00
di awal nomor internasional.Diedit dari percakapan di komentar:
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).
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.
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.
varchar
String
Regex sederhana. Lihat: https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java. Gunakan javax.constraints.Pattern.
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.
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.
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.
Kebutuhan saya adalah untuk menampilkan 10 digit nomor telepon di jsp. Jadi di sini's setup untuk saya. MySQL:
numeric(10)
Jawa Sisi:
dan itu berhasil!
Di mysql: BIGINT. Di jawa: Panjang.