Apabila mencipta jadual dalam MySQL, panjang lajur jenis VARCHAR hendaklah ditetapkan dengan jelas. Walau bagaimanapun, untuk jenis TEXT, panjangnya tidak perlu dinyatakan. Jadi apakah perbezaan antara VARCHAR dan TEXT?
TEKS
VARCHAR(M)
Panjang maksimum TEKS ditetapkan kepada 2¹⁶-1 = 65535 aksara, manakala panjang maksimum VARCHAR adalah berubah-ubah, sehingga 2¹⁶-1. Oleh itu, saiz TEXT tidak boleh dipilih, tetapi saiz VARCHAR adalah.
Perbezaan lain ialah indeks tidak dibenarkan pada lajur TEXT (kecuali untuk indeks teks penuh). Oleh itu, untuk mengindeks lajur ini, anda mesti menggunakan VARCHAR. Tetapi sila ambil perhatian bahawa panjang indeks juga terhad Jika lajur VARCHAR terlalu panjang, indeks hanya boleh menggunakan beberapa aksara pertama lajur VARCHAR (lihat dokumentasi CREATE INDEX).
VARCHAR juga harus digunakan jika anda tahu bahawa panjang maksimum rentetan input yang mungkin hanya M, seperti nombor telefon atau nama. Kemudian, anda boleh menggunakan VARCHAR(30) dan bukannya TINYTEXT atau TEXT, supaya walaupun seseorang cuba menyimpan teks Lord of the Rings penuh dalam lajur yang anda gunakan untuk menyimpan nombor telefon, anda hanya perlu menyimpan 30 aksara pertama : )
Edit:Jika teks yang akan disimpan dalam pangkalan data lebih panjang daripada 65535 aksara, anda mesti memilih MEDIUMTEXT atau LONGTEXT, tetapi berhati-hati: panjang rentetan maksimum yang disimpan ialah 16 MB untuk MEDIUMTEXT dan 4 GB untuk LONGTEXT. Jika anda menggunakan LONGTEXT dan mendapatkan data melalui PHP (sekurang-kurangnya jika anda menggunakan mysqli dan tidak menggunakan fungsi store_result), anda mungkin mendapat ralat peruntukan memori kerana PHP akan cuba memperuntukkan 4 GB memori untuk memastikan keseluruhan rentetan boleh menjadi penimbal. Ini boleh berlaku dalam bahasa lain selain PHP juga.
Walau bagaimanapun, anda harus sentiasa menyemak input (adakah ia terlalu panjang? Adakah ia mengandungi kod pelik?) sebelum menyimpan data dalam pangkalan data .
Sila ambil perhatian: untuk kedua-dua jenis, ruang cakera yang diperlukan hanya bergantung pada panjang rentetan yang disimpan, bukan panjang maksimum. Contohnya, jika anda menggunakan set aksara latin1 dan menyimpan teks "Ujian" dalam VARCHAR(30), VARCHAR(100) dan TINYTEXT, ia akan sentiasa memerlukan 5 bait (1 bait untuk menyimpan panjang rentetan, setiap aksara 1 bait) . Jika anda menyimpan teks yang sama dalam lajur VARCHAR(2000) atau TEXT, ia juga memerlukan ruang yang sama, tetapi dalam kes ini, ia akan mengambil masa 6 bait (2 bait untuk menyimpan panjang rentetan, 1 perkataan setiap aksara Festival).
Lihat dokumentasi untuk mendapatkan maklumat lanjut.
Akhir sekali, saya ingin menambah bahawa TEXT dan VARCHAR ialah jenis data panjang berubah-ubah, jadi mereka berkemungkinan besar akan meminimumkan ruang yang diperlukan untuk menyimpan data
Atas ialah kandungan terperinci VARCHAR lwn. TEXT dalam MySQL: Apakah perbezaan utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!