Ralat Panjang Kunci MySQL Semasa Migrasi Pangkalan Data
Apabila cuba menjana migrasi menggunakan acts_as_taggable_on, pengguna mungkin menghadapi ralat:
Mysql::Ralat: Kunci yang ditentukan terlalu panjang; panjang kunci maks ialah 1000 bait
Ralat ini menunjukkan bahawa indeks dibuat pada jadual pengetegan (index_taggings_on_taggable_id_and_taggable_type_and_context) melebihi had panjang kunci maksimum dalam 1000 bait MySQL.
Punca
Ralat disebabkan oleh pengehadan dalam MySQL, terutamanya apabila menggunakan enjin seperti MyISAM atau InnoDB. Enjin ini mengenakan sekatan ke atas jumlah ruang yang tersedia untuk menentukan indeks lajur. Untuk MyISAM, hadnya ialah 1000 bait, manakala untuk InnoDB, ia adalah 767 bait. Selain itu, jenis data lajur yang diindeks memberi kesan kepada penggunaan ruang, dengan lajur VARCHAR mengambil kira-kira tiga kali ganda had aksara yang ditentukan.
Penyelesaian
Untuk mengatasi isu ini, pengguna perlu mencipta indeks yang disesuaikan yang hanya mempertimbangkan sebahagian daripada jenis data lajur yang diindeks. Contohnya, jika lajur taggable_id mempunyai jenis data VARCHAR(100), pengguna boleh menentukan:
CREATE INDEX example_idx ON taggings(taggable_id(50))
Dengan mengehadkan indeks kepada 50 aksara pertama lajur taggable_id, saiz indeks boleh dikurangkan kepada 150 bait, yang termasuk dalam had yang dibenarkan. Indeks ini akan berkesan untuk carian yang melibatkan 50 aksara pertama lajur taggable_id sahaja.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Kunci Yang Ditentukan Terlalu Panjang' Semasa Migrasi Pangkalan Data MySQL dengan acts_as_taggable_on?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!