Dalam penyimpanan, VARCHAR(255)
cukup pintar untuk menyimpan hanya panjang yang Anda butuhkan pada baris tertentu, tidak seperti CHAR(255)
yang selalu menyimpan 255 karakter.
Tetapi karena Anda menandai pertanyaan ini dengan MySQL, saya akan menyebutkan tip khusus MySQL: karena baris disalin dari lapisan mesin penyimpanan ke lapisan SQL, VARCHAR
bidang diubah CHAR
untuk mendapatkan keuntungan dari bekerja dengan baris dengan lebar tetap. Jadi string dalam memori menjadi berlapis hingga panjang maksimumVARCHAR
kolom yang Anda nyatakan .
Saat kueri Anda secara implisit menghasilkan tabel sementara, misalnya saat menyortir atau GROUP BY
, ini bisa menggunakan banyak memori. Jika Anda menggunakan banyak VARCHAR(255)
bidang untuk data yang tidak perlu sepanjang itu, ini bisa membuat tabel sementara menjadi sangat besar.
Anda mungkin juga ingin mengetahui bahwa perilaku "padding out" ini berarti bahwa string yang dideklarasikan dengan rangkaian karakter utf8 mengisi hingga tiga byte per karakter bahkan untuk string yang Anda simpan dengan konten byte tunggal (misalnya karakter ascii atau latin1). Dan juga set karakter utf8mb4 menyebabkan string menjadi empat byte per karakter dalam memori.
Jadi VARCHAR(255)
dalam utf8 menyimpan string pendek seperti "Tidak ada opini" membutuhkan 11 byte pada disk (sepuluh karakter dengan karakter yang lebih rendah, ditambah satu byte untuk panjangnya) tetapi membutuhkan 765 byte dalam memori, dan dengan demikian dalam tabel temp atau hasil yang diurutkan.
Saya telah membantu pengguna MySQL yang tanpa sadar sering membuat tabel temp 1,5GB dan mengisi ruang disk mereka. Mereka memiliki banyak VARCHAR(255)
kolom yang dalam praktiknya menyimpan string yang sangat pendek.
Sebaiknya tentukan kolom berdasarkan jenis data yang ingin Anda simpan. Ini memiliki manfaat untuk menegakkan batasan terkait aplikasi, seperti yang telah disebutkan orang lain. Tetapi memiliki manfaat fisik untuk menghindari pemborosan memori yang saya jelaskan di atas.
Sulit untuk mengetahui alamat pos yang paling panjang tentunya, itulah sebabnya banyak orang memilih panjang VARCHAR
yang tentunya lebih panjang dari alamat manapun. Dan 255 adalah kebiasaan karena ini adalah panjang maksimum a VARCHAR
yang panjangnya dapat dikodekan dengan satu byte. Itu juga merupakan VARCHAR
panjang maksimum di MySQL yang lebih tua dari 5.0.