Masalah dengan ukuran baris maksimum di MySQL

8

Saya punya masalah dengan MySQL, saya punya tabel dengan banyak bidang teks. Ketika saya mencoba menyimpan beberapa data saya mendapatkan kesalahan ini.

Ukuran baris terlalu besar. Ukuran baris maksimum untuk tipe tabel yang digunakan, tidak termasuk BLOB, adalah 8126. Anda harus mengubah beberapa kolom menjadi TEXT atau BLOB

Teks yang saya simpan di setiap bidang tidak terlalu panjang, hanya beberapa paragraf di masing-masing bidang.

Apa yang dapat saya?

Memochipan
sumber

Jawaban:

9

Terima kasih untuk orang-orang yang menjawab. Tautan yang Anda poskan adalah basis yang sangat berguna untuk mulai belajar.

Akhirnya saya menemukan halaman ini: http://download.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

Dan saya mengkonfigurasi my.cnf menambahkan dua baris ini di [mysqld]bagian:

innodb_file_per_table
innodb_file_format = Barracuda

Lalu ALTERsaya meja saya dengan perintah ini melalui phpMyAdmin:

ALTER TABLE nombre_tabla
 ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8; 
 SHOW WARNINGS;

Dimungkinkan juga menggunakan pengaturan lain yang dapat Anda baca di tautan di atas, tetapi ini bekerja baik untuk saya.

Memochipan
sumber
Saya tidak menemukan banyak info tentang apa kelemahan untuk COMPRESSED dan Barracuda. Mengapa tidak selalu menggunakannya jika itu lebih baik dan menyelesaikan ini?
Ted
3

Anda mungkin ingin melihat artikel ini yang menjelaskan banyak tentang ukuran baris MySQL. Penting untuk dicatat bahwa bahkan jika Anda menggunakan bidang TEKS atau BLOB, ukuran baris Anda masih bisa lebih dari 8K (batas untuk InnoDB) karena itu menyimpan 768 byte pertama untuk setiap bidang sebaris di halaman. Cara paling sederhana untuk memperbaikinya adalah dengan menggunakan format file Barracuda dengan InnoDB. Ini pada dasarnya menghilangkan masalah sama sekali dengan hanya menyimpan pointer 20 byte ke data teks alih-alih menyimpan firs 768 byte.

Kibbee
sumber
1

Nah, lakukan seperti yang dikatakan mysql: konversi bidang besar dari varchar ke teks atau gumpalan (ALTER TABLE). bidang teks berperilaku sangat mirip varchar (indeks membutuhkan panjang awalan, tetapi tetap berfungsi), tetapi disimpan secara terpisah.

Referensi ini memberi tahu Anda batas pasti dari setiap mesin tabel mysql stok:

http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

Dan ini semua yang perlu diketahui tentang bidang teks:

http://dev.mysql.com/doc/refman/5.0/id/blob.html

korkman
sumber
Terima kasih @korkman atas jawaban Anda, bidang saya sudah didefinisikan sebagai teks saat masalah terjadi. Saya akan menonton saran tautan Anda.
Memochipan
0

Sebagian besar posting silang dari Stack Overflow , tetapi ini adalah bug terbuka (dan terverifikasi) di mesin InnoDB server MySQL . Perbaikan sementara untuk saat ini adalah mundur ke mesin MyISAM sebagai penyimpanan sementara. Jadi, di file my.cnf Anda:

internal_tmp_disk_storage_engine=MyISAM
hjpotter92
sumber