Isu:
Anda menghadapi ralat "Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 1000 bait" apabila mencipta jadual MySQL dengan pertanyaan tertentu. Pertanyaan ini melibatkan mencipta jadual dengan berbilang lajur dan indeks gabungan pada sebahagian daripadanya.
Penjelasan:
Ralat ini berlaku apabila jumlah panjang lajur yang diindeks melebihi panjang kunci maksimum yang dibenarkan dalam MySQL, iaitu 1000 bait. Dalam kes ini, kekunci "indeks" merentangi empat lajur dengan jenis data VARCHAR, setiap satunya mempunyai panjang maksimum 255 aksara.
Penyelesaian:
Sebagaimana disebutkan dalam penyelesaian yang disediakan, punca ralat ini ialah panjang lajur diindeks yang berlebihan. Untuk menyelesaikan masalah ini, adalah disyorkan untuk menggunakan indeks awalan, di mana hanya sebahagian daripada data diindeks. Ini dicapai dengan menentukan panjang untuk setiap lajur yang diindeks semasa mentakrifkan indeks. Contohnya:
... KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50)) ...
Menentukan Panjang Awalan Optimum:
Untuk menentukan panjang awalan yang paling sesuai bagi setiap lajur, adalah disyorkan untuk menganalisis pengedaran data. Anda boleh menggunakan pertanyaan seperti ini:
SELECT ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10, ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20, ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50, ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100 FROM `pds_core_menu_items`;
Pertanyaan ini akan memberikan peratusan baris dengan rentetan yang kurang daripada atau sama dengan panjang tertentu. Berdasarkan keputusan ini, anda boleh memilih panjang awalan yang meliputi sebahagian besar data tanpa membuang ruang yang berlebihan. Contohnya, jika 80% daripada rentetan panjangnya kurang daripada 20 aksara, panjang awalan 50 mungkin mencukupi.
Nota Tambahan:
Ia juga penting untuk ambil perhatian bahawa jenis data INT(1) dan INT(32) yang digunakan dalam pertanyaan asal tidak mempunyai kesan pada storan atau julat nilai. INT sentiasa jenis integer 32-bit yang membenarkan nilai dari -2,147,483,648 hingga 2,147,483,647. Argumen berangka dalam kes ini terutamanya mempengaruhi padding paparan dan tidak mempunyai kesan pada storan asas.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 1000 bait'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!