it-swarm-id.com

Jenis data apa yang harus digunakan untuk menyimpan nomor telepon di SQL Server 2005?

Saya perlu menyimpan nomor telepon dalam sebuah tabel. Mohon sarankan tipe data apa yang harus saya gunakan? Tunggu. Silakan baca sebelum Anda menekan balasan ..

Bidang ini perlu diindeks berat karena Tenaga Penjualan dapat menggunakan bidang ini untuk mencari (termasuk pencarian karakter liar).

Sampai sekarang, kami mengharapkan nomor telepon datang dalam sejumlah format (dari file XML). Apakah saya harus menulis parser untuk dikonversi ke format yang seragam? Mungkin ada jutaan data (dengan duplikat) dan saya tidak ingin mengikat sumber daya server (dalam kegiatan seperti preprocessing terlalu banyak) setiap kali beberapa sumber data datang ..

Ada saran dipersilahkan ..

Pembaruan: Saya tidak punya kendali atas data sumber. Hanya saja, struktur file xml adalah standar. Ingin menjaga agar xml parsing seminimal mungkin. Setelah ada dalam database, pengambilan harus cepat. Satu saran gila akan di sekitar sini adalah bahwa itu bahkan harus bekerja dengan fitur Ajax AutoComplete (sehingga Sales Reps dapat melihat yang cocok segera) .Amg !!

70
John

Apakah ini termasuk:

  • Nomor internasional?
  • Ekstensi?
  • Informasi lain selain nomor aktual (seperti "minta bobby")?

Jika semua ini tidak, saya akan menggunakan bidang char 10 dan menghapus semua data non-numerik. Jika yang pertama adalah ya dan dua lainnya tidak, saya akan menggunakan dua bidang varchar (50), satu untuk input asli dan satu dengan semua data non-numerik bergaris dan digunakan untuk pengindeksan. Jika 2 atau 3 adalah ya, saya pikir saya akan melakukan dua bidang dan semacam pengurai gila untuk menentukan apa itu ekstensi atau data lain dan menanganinya dengan tepat. Tentu saja Anda dapat menghindari kolom ke-2 dengan melakukan sesuatu dengan indeks di mana menghapus karakter tambahan saat membuat indeks, tapi saya hanya akan membuat kolom kedua dan mungkin melakukan pengupasan karakter dengan pemicu.

Perbarui: untuk mengatasi masalah AJAX, mungkin tidak seburuk yang Anda pikirkan. Jika ini secara realistis cara utama apa pun dilakukan untuk tabel, simpan hanya angka di kolom sekunder seperti yang saya katakan, dan kemudian buat indeks untuk kolom yang berkerumun.

50
Kearns

Kami menggunakan varchar (15) dan tentu saja indeks pada bidang itu.

Alasannya adalah bahwa standar internasional dapat mendukung hingga 15 digit

Wikipedia - Format Nomor Telepon

Jika Anda mendukung nomor Internasional, saya sarankan penyimpanan terpisah dari Kode Zona Dunia atau Kode Negara untuk memfilter kueri dengan lebih baik sehingga Anda tidak menemukan parsing dan memeriksa panjang bidang nomor telepon Anda untuk membatasi panggilan yang dikembalikan ke AS untuk contoh

36
Brad Osterloo

Gunakan CHAR (10) jika Anda hanya menyimpan nomor Telepon AS. Hapus semuanya kecuali digit.

4
Joseph Bui

Saya mungkin kehilangan yang jelas di sini, tetapi bukankah varchar cukup lama untuk nomor telepon terlama Anda yang diharapkan bekerja dengan baik?

Jika saya saya melewatkan sesuatu yang jelas, saya akan senang jika seseorang menunjukkannya ...

3
cori

Saya akan menggunakan varchar (22). Cukup besar untuk menampung nomor telepon amerika utara dengan ekstensi. Anda ingin menghapus semua karakter '(', ')', '-' yang tidak menyenangkan, atau hanya menguraikannya dalam satu format yang seragam.

Alex

3
Alex Fort

menggunakan varchar sangat tidak efisien. gunakan jenis uang dan buatlah pengguna yang dinyatakan ketik "nomor telepon", dan buat aturan untuk hanya mengizinkan angka positif.

jika Anda mendeklarasikannya sebagai (19,4) Anda bahkan dapat menyimpan ekstensi 4 digit dan cukup besar untuk nomor internasional, dan hanya membutuhkan 9 byte penyimpanan. Juga, indeks cepat.

2
fjleon

SQL Server 2005 dioptimalkan dengan cukup baik untuk permintaan substring untuk teks dalam bidang varchar yang diindeks. Untuk 2005 mereka memperkenalkan statistik baru ke ringkasan string untuk bidang indeks. Ini sangat membantu dalam pencarian teks lengkap.

2
Joseph Daigle

Sangat umum menggunakan "x" atau "ext" untuk menunjukkan ekstensi, jadi izinkan 15 karakter (untuk dukungan internasional penuh) ditambah 3 (untuk "ext") ditambah 4 (untuk ekstensi itu sendiri) memberikan total 22 karakter . Itu seharusnya membuat Anda tetap aman.

Atau, normalkan pada input sehingga "ext" apa pun akan diterjemahkan ke "x", memberikan maksimum 20.

1
Rob G

nvarchar dengan preprocessing untuk membakukan mereka sebanyak mungkin. Anda mungkin ingin mengekstrak ekstensi dan menyimpannya di bidang lain.

1
John Sheehan

Normalisasi data kemudian simpan sebagai varchar. Normalisasi bisa rumit.

Itu harus menjadi hit satu kali. Kemudian saat catatan baru masuk, Anda membandingkannya dengan data yang dinormalisasi. Seharusnya sangat cepat.

1
Iain Holder

Gunakan bidang varchar dengan batasan panjang.

1
user13270

Karena Anda perlu mengakomodasi banyak format nomor telepon yang berbeda (dan mungkin menyertakan hal-hal seperti ekstensi, dll.) Mungkin masuk akal untuk memperlakukannya seperti halnya Anda menggunakan varchar lainnya. Jika Anda bisa mengendalikan input, Anda bisa mengambil sejumlah pendekatan untuk membuat data lebih berguna, tetapi tidak terdengar seperti itu.

Setelah Anda memutuskan untuk memperlakukannya sebagai string lain, Anda dapat fokus pada mengatasi masalah yang tak terhindarkan terkait data buruk, pembentukan nomor telepon misterius dan apa pun yang akan muncul. Tantangannya adalah membangun strategi pencarian yang baik untuk data dan bukan bagaimana Anda menyimpannya menurut saya. Itu selalu merupakan tugas yang sulit karena harus berurusan dengan tumpukan besar data yang Anda tidak punya kendali atas pengumpulan.

1
unicorn.ninja

Gunakan SSIS untuk mengekstrak dan memproses informasi. Dengan begitu Anda akan memiliki pemrosesan file XML yang terpisah dari SQL Server. Anda juga dapat melakukan transformasi SSIS pada server terpisah jika diperlukan. Simpan nomor telepon dalam format standar menggunakan VARCHAR. NVARCHAR tidak diperlukan karena kita berbicara tentang angka dan mungkin beberapa karakter lain, seperti '+', '', '(', ')' dan '-'.

1
Magnus Johansson

Saya menyadari utas ini sudah tua, tetapi ada baiknya menyebutkan keuntungan menyimpan sebagai tipe numerik untuk keperluan pemformatan, khususnya dalam kerangka .NET.

IE

.DefaultCellStyle.Format = "(###)###-####" // Will not work on a string
1
Mr. Tripodi

Itu selalu lebih baik untuk memiliki tabel terpisah untuk atribut multi nilai seperti nomor telepon.

Karena Anda tidak memiliki kendali atas data sumber, Anda dapat mem-parsing data dari file XML dan mengubahnya menjadi format yang tepat sehingga tidak akan ada masalah dengan format negara tertentu dan menyimpannya dalam tabel terpisah sehingga - pengindeksan dan pengambilan keduanya akan efisien.

Terima kasih.

0
Jayghosh Wankar