Saya tahu pertanyaan dengan judul ini telah dijawab sebelumnya, tetapi harap baca terus. Saya telah membaca semua pertanyaan / jawaban lain tentang kesalahan ini sebelum memposting.
Saya mendapatkan kesalahan di atas untuk kueri berikut:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
`menu_id` varchar(32) NOT NULL,
`parent_menu_id` int(32) unsigned DEFAULT NULL,
`menu_name` varchar(255) DEFAULT NULL,
`menu_link` varchar(255) DEFAULT NULL,
`plugin` varchar(255) DEFAULT NULL,
`menu_type` int(1) DEFAULT NULL,
`extend` varchar(255) DEFAULT NULL,
`new_window` int(1) DEFAULT NULL,
`rank` int(100) DEFAULT NULL,
`hide` int(1) DEFAULT NULL,
`template_id` int(32) unsigned DEFAULT NULL,
`alias` varchar(255) DEFAULT NULL,
`layout` varchar(255) DEFAULT NULL,
PRIMARY KEY (`menu_id`),
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Apakah ada yang tahu mengapa dan bagaimana cara memperbaikinya? Tangkapannya adalah - kueri yang sama ini berfungsi dengan sempurna di mesin lokal saya, dan bekerja dengan baik di host saya sebelumnya. Btw. Itu dari proyek yang matang - phpdevshell - jadi saya kira orang-orang ini tahu apa yang mereka lakukan, meskipun Anda tidak pernah tahu.
Setiap petunjuk dihargai.
Saya menggunakan phpMyAdmin.
sumber
Kesalahan ini berarti panjang indeks
index
lebih dari 1000 byte. MySQL dan mesin penyimpanan mungkin memiliki batasan ini. Saya mendapatkan kesalahan serupa pada MySQL 5.5 - 'Kunci yang ditentukan terlalu panjang; panjang kunci maks adalah 3072 byte 'ketika menjalankan skrip ini:UTF8 adalah multi-byte, dan panjang kunci dihitung dengan cara ini - 500 * 3 * 6 = 9000 byte.
Tapi perhatikan, kueri berikutnya berfungsi!
... karena saya menggunakan CHARSET = latin1, dalam hal ini panjang kunci adalah 500 * 6 = 3000 byte.
sumber
Saya mengalami masalah ini, dan diselesaikan dengan mengikuti:
Referensi
sumber
jalankan query ini sebelum membuat atau mengubah tabel.
SET @@global.innodb_large_prefix = 1;
ini akan mengatur panjang kunci maksimal menjadi 3072 byte
sumber
Batas ukuran indeks ini tampaknya lebih besar pada versi 64 bit MySQL.
Saya mencapai batasan ini mencoba membuang database dev kami dan memuatnya pada virt VMWare lokal. Akhirnya saya menyadari bahwa server dev jarak jauh adalah 64 bit dan saya telah membuat virt. Saya baru saja membuat virt 64 bit dan saya dapat memuat database secara lokal.
sumber
Saya baru saja melewati kesalahan ini dengan hanya mengubah nilai "panjang" dalam database asli menjadi total sekitar "1000" dengan mengubah strukturnya, dan kemudian mengekspor yang sama, ke server. :)
sumber
Saya menghadapi masalah yang sama, digunakan di bawah kueri untuk menyelesaikannya.
Saat membuat DB, Anda dapat menggunakan encoding utf-8
misalnya.
create database my_db character set utf8 collate utf8mb4;
EDIT: (Mempertimbangkan saran dari komentar) Mengubah utf8_bin menjadi utf8mb4
sumber
utf8
BUKANutf8
, ini adalah format kepemilikan yang disadap yang seharusnya tidak pernah membuahkan hasil.utf8mb4
benarutf8
dan merupakan default yang disarankan untukutf8
dukungan yang tepat .utf8mb4
adalah pengkodean yang benar untuk digunakan di mysql dan bukanutf8