Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat Ralat 'Kunci Yang Ditentukan Terlalu Panjang' Semasa Migrasi Pangkalan Data MySQL dengan acts_as_taggable_on?

Mengapa Saya Mendapat Ralat 'Kunci Yang Ditentukan Terlalu Panjang' Semasa Migrasi Pangkalan Data MySQL dengan acts_as_taggable_on?

Susan Sarandon
Lepaskan: 2025-01-04 07:20:35
asal
320 orang telah melayarinya

Why Am I Getting a

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))
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan