Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa kasus penggunaan untuk memilih CHAR daripada VARCHAR di SQL?

Aturan umumnya adalah memilih CHAR jika semua baris memiliki panjang yang sama . Pilih VARCHAR (atau NVARCHAR ) ketika panjangnya bervariasi secara signifikan. CHAR mungkin juga sedikit lebih cepat karena semua baris memiliki panjang yang sama.

Ini bervariasi menurut implementasi DB, tetapi umumnya, VARCHAR (atau NVARCHAR ) menggunakan satu atau dua byte lebih banyak penyimpanan (untuk panjang atau penghentian) selain data aktual. Jadi (dengan asumsi Anda menggunakan set karakter satu byte) menyimpan kata "FooBar"

  • CHAR(6) =6 byte (tanpa overhead)
  • VARCHAR(100) =8 byte (2 byte overhead)
  • CHAR(10) =10 byte (4 byte sampah)

Intinya adalah CHAR bisa menjadi lebih cepat dan lebih hemat ruang untuk data dengan panjang yang relatif sama (dalam perbedaan panjang dua karakter).

Catatan :Microsoft SQL memiliki 2 byte overhead untuk VARCHAR. Ini mungkin berbeda dari DB ke DB, tetapi umumnya, setidaknya ada 1 byte overhead yang diperlukan untuk menunjukkan panjang atau EOL pada VARCHAR.

Seperti yang ditunjukkan oleh Gaven di komentar:Hal-hal berubah ketika datang ke set karakter multi-byte, dan merupakan kasus di mana VARCHAR menjadi pilihan yang jauh lebih baik.

Catatan tentang panjang yang dinyatakan dari VARCHAR :Karena menyimpan panjang konten yang sebenarnya, maka Anda tidak menyia-nyiakan panjang yang tidak terpakai. Jadi menyimpan 6 karakter di VARCHAR(6), VARCHAR(100), atau VARCHAR(MAX) menggunakan jumlah penyimpanan yang sama. Baca lebih lanjut tentang perbedaan saat menggunakan VARCHAR(MAX). Anda menyatakan maksimum ukuran di VARCHAR untuk membatasi berapa banyak yang disimpan.

Dalam komentar AlwaysLearning menunjukkan bahwa dokumen Microsoft Transact-SQL tampaknya mengatakan yang sebaliknya. Saya akan menyarankan bahwa itu adalah kesalahan atau setidaknya dokumennya tidak jelas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengimpor file .bak SQL Server ke MySQL?

  2. Menggunakan T-SQL, kembalikan elemen delimited ke-n dari sebuah string

  3. sql server 2008 management studio tidak memeriksa sintaks kueri saya

  4. Cara Menyertakan Hasil yang Mengikat untuk Tempat Terakhir saat Menggunakan Klausa TOP di SQL Server

  5. Pernyataan KASUS SQL