Ralat: Jenis Lajur Kunci Tidak Sah untuk Indeks
SQLite menghadapi ralat semasa mengindeks lajur dengan jenis data tertentu. Satu ralat sedemikian berlaku apabila cuba menggunakan lajur nvarchar(max) sebagai lajur utama dalam indeks, mengakibatkan mesej ralat:
Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.
Memahami Had
SQLite mengenakan had saiz maksimum pada kunci indeks, mengehadkan panjangnya kepada 450 aksara. Had ini timbul daripada kekangan 8000-bait setiap baris pada kekangan unik, yang merangkumi kedua-dua kunci dan mana-mana lajur diindeks tambahan.
Penyelesaian: Mengubah Suai Jenis Data Lajur Utama
Untuk menyelesaikan isu ini, anda boleh mengubah suai jenis data lajur kunci kepada saiz yang lebih kecil yang memenuhi had kunci indeks. Penyelesaian berikut menggunakan nvarchar(450), yang membenarkan panjang kunci maksimum 450 aksara:
create table [misc_info] ( [id] INTEGER PRIMARY KEY IDENTITY NOT NULL, [key] nvarchar(450) UNIQUE NOT NULL, [value] nvarchar(max) NOT NULL )
Pertimbangan Alternatif
Jika menyimpan aksara bukan Unikod tidak penting, anda boleh mempertimbangkan untuk beralih kepada varchar bukannya nvarchar, yang meningkatkan panjang kunci maksimum kepada 900 aksara. Walau bagaimanapun, nvarchar lebih sesuai apabila berurusan dengan aksara daripada berbilang halaman kod.
Ingat bahawa pengehadan ini terpakai khusus untuk pengindeksan sebaris. Jika anda menggunakan kaedah pengindeksan luaran, seperti membuat indeks penutup pada jadual lain, had saiz lajur kunci mungkin berbeza.
Atas ialah kandungan terperinci Mengapa SQLite Melemparkan Ralat 'Jenis Lajur Kunci Tidak Sah untuk Indeks', dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!