Vấn đề với kích thước hàng tối đa trong MySQL


8

Tôi có một vấn đề với MySQL, tôi có một bảng có nhiều trường văn bản. Khi tôi cố gắng lưu trữ một số dữ liệu, tôi nhận được lỗi này.

Kích thước hàng quá lớn. Kích thước hàng tối đa cho loại bảng đã sử dụng, không tính BLOB, là 8126. Bạn phải thay đổi một số cột thành văn bản hoặc BLOB

Văn bản mà tôi lưu trữ trong mỗi lĩnh vực không quá dài, chỉ có một vài đoạn trong mỗi lĩnh vực.

Tôi có thể làm gì?

Câu trả lời:


9

Cảm ơn mọi người mà trả lời. Các liên kết bạn đã đăng là một cơ sở rất hữu ích để bắt đầu học.

Cuối cùng tôi đã tìm thấy trang này: http://doad.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

Và tôi đã cấu hình my.cnf thêm hai dòng này trong [mysqld]phần:

innodb_file_per_table
innodb_file_format = Barracuda

Sau đó, ALTERtôi bảng của tôi với lệnh này thông qua phpMyAdmin:

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

Cũng có thể sử dụng các cài đặt khác mà bạn có thể đọc trong liên kết ở trên, nhưng chúng có thể hoạt động tốt với tôi.


Tôi không tìm thấy nhiều thông tin về nhược điểm của COMPRESSED và Barracuda. Tại sao không luôn luôn sử dụng nếu điều đó tốt hơn và giải quyết điều này?
Ted

3

Bạn có thể muốn xem bài viết này giải thích rất nhiều về kích thước hàng của MySQL. Điều quan trọng cần lưu ý là ngay cả khi bạn sử dụng các trường TEXT hoặc BLOB, kích thước hàng của bạn vẫn có thể vượt quá 8K (giới hạn đối với InnoDB) vì nó lưu trữ 768 byte đầu tiên cho mỗi trường trong dòng. Cách đơn giản nhất để khắc phục điều này là sử dụng định dạng tệp Barracuda với InnoDB. Điều này về cơ bản được loại bỏ hoàn toàn vấn đề bằng cách chỉ lưu trữ con trỏ 20 byte vào dữ liệu văn bản thay vì lưu trữ 768 byte linh hoạt.


1

Vâng, hãy làm như mysql nói: chuyển đổi các trường lớn từ varchar sang văn bản hoặc blob (ALTER TABLE). Các trường văn bản hoạt động giống như varchar (chỉ mục cần độ dài tiền tố, nhưng vẫn hoạt động), nhưng được lưu trữ riêng.

Tham chiếu này cho bạn biết giới hạn chính xác của mọi công cụ bảng mysql chứng khoán:

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

Và đây là tất cả mọi thứ cần biết về các trường văn bản:

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


Cảm ơn @korkman vì câu trả lời của bạn, các trường của tôi đã được xác định là văn bản khi sự cố xảy ra. Tôi sẽ xem các đề xuất liên kết của bạn.
Memochipan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.