Độ dài khóa tối đa trong MySQL là bao nhiêu?

Độ dài tối đa của trường được lập chỉ mục mà công cụ lưu trữ InnoDB có thể sử dụng là 767 byte. Nếu bạn tạo chỉ mục trên trường nhiều byte hoặc nhiều trường thì có thể báo lỗi này

Lưu ý Ví dụ: bộ ký tự bốn byte utf8mb4 được sử dụng. Độ dài mặc định của trường được lập chỉ mục cho phép bởi bộ ký tự utf8mb4 là 191 ký tự dựa trên công thức sau. 767 byte/4 byte cho mỗi ký tự ≈ 191 ký tự. Nếu bạn tạo chỉ mục cho trường thuộc loại varchar (255) hoặc char (255), việc tạo chỉ mục không thành công. Để biết thêm thông tin, hãy xem tài liệu về MySQL tại trang web chính thức của MySQL

Các giải pháp

Sau khi bạn thay đổi giá trị của innodb_large_prefix thành BẬT, độ dài tối đa của trường được lập chỉ mục mà InnoDB có thể sử dụng ở định dạng hàng NĂNG ĐỘNG hoặc NÉN tăng lên 3.072 byte

Lưu ý innodb_large_prefix đã bị xóa khỏi MySQL 8. 0. Nếu phiên bản RDS của bạn chạy MySQL 8. 0, bạn có thể thay đổi giá trị của Row_format cho bảng. Để biết thêm thông tin, xem Bước 3

Sự cố này đang xảy ra trên một trong các máy chủ prod của chúng tôi (trước đây nó là mysql độc lập và sau đó được chuyển sang percona, nhưng sự cố đã xuất hiện trong cả hai phiên bản), nhưng sự cố này hoạt động tốt trên môi trường nhà phát triển của chúng tôi

Vì vậy, có cách nào để chúng tôi có thể cập nhật độ dài chỉ mục của môi trường prod hoặc thứ gì đó để nó không gây ra lỗi này không?

Khi khôi phục cơ sở dữ liệu MySQL, tôi gặp lỗi “Khóa được chỉ định quá dài;

1

2

3

người dùng@máy chủ [~]$ mysql new_db < wordpress-2021-12-19-b51f8a6.sql

ERROR 1071 (42000) at line 745 in file: 'wordpress-2021-12-19-b51f8a6. sql'. Khóa đã chỉ định đã quá dài; max key length is 767 bytes

người dùng@máy chủ [~]$

MySQL phiên bản 5. 6 và các phiên bản cũ hơn có giới hạn tiền tố 767 byte

https. // nhà phát triển. mysql. com/doc/refman/5. 6/vi/tạo chỉ mục. html

Hỗ trợ tiền tố và độ dài của tiền tố (nếu được hỗ trợ) phụ thuộc vào công cụ lưu trữ. Ví dụ: tiền tố có thể dài tới 767 byte đối với bảng InnoDB hoặc 3072 byte nếu tùy chọn innodb_large_prefix được bật. Đối với các bảng MyISAM, giới hạn độ dài tiền tố là 1000 byte

Từ thông báo lỗi, lỗi ở dòng 745, khi kiểm tra tệp SQL, tôi thấy câu lệnh SQL sau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

TẠO BẢNG `wpk4_gla_merchant_issues` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `product_id` bigint(20) NOT NULL,

  `vấn đề` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `mức độ nghiêm trọng` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'warning',

  `sản phẩm` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `hành động` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `action_url` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `applicable_countries` văn bản COLLATE utf8mb4_unicode_520_ci NOT NULL,

  `nguồn` varchar(10) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'mc',

  `loại` varchar(10) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'product',

  `created_at` datetime NOT NULL,

  CHÍNH KEY (`id`),

  DUY NHẤT KEY `product_issue` (`product_id`,`issue`)

) CÔNG DỤNG = InnoDB MẶC ĐỊNH CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

Để khắc phục, hãy tìm

1

DUY NHẤT KEY `product_issue` (`product_id`,`issue`)

Thay bằng

1

DUY NHẤT KEY `product_issue` (`product_id`,`issue`(191))

Điều này sẽ giới hạn độ dài của cột vấn đề là 191 ký tự. Mỗi ký tự chiếm 4 byte để lưu trữ trong bộ ký tự utf8mb4. Giới hạn 191 được tìm thấy bằng cách thử với độ dài mặc định cho trường vấn đề 200, sau đó giảm nó cho đến khi SQL được tạo đúng cách. Phép tính là 191 * 4 + chiều dài của cột id < 767 Giải pháp chính xác là sử dụng các phiên bản MySQL mới hơn như MySQL 5. 7, cho phép độ dài lên tới 3072 byte

Độ dài khóa chính tối đa trong MySQL là bao nhiêu?

MySQL có giới hạn nào về độ dài của khóa chính không? . Một chỉ mục có thể chứa từ 1 đến 16 cột hoặc một phần cột. 500 bytes for MyISAM tables and 1024 bytes for InnoDB. An index can contain from 1 to 16 columns or parts of columns.

Độ dài khóa tối đa 767 trong MySQL là bao nhiêu?

Giới hạn cho UTF8 là 767/3 = 255 ký tự, đối với UTF8mb4 sử dụng 4 byte cho mỗi ký tự là 767/4 = 191 ký tự.

Các giới hạn của MySQL là gì?

MySQL có không giới hạn số lượng bảng . Hệ thống tệp cơ bản có thể có giới hạn về số lượng tệp đại diện cho bảng. Các công cụ lưu trữ riêng lẻ có thể áp đặt các ràng buộc dành riêng cho công cụ. InnoDB cho phép tới 4 tỷ bảng.

Kích thước hàng tối đa trong MySQL 8 là bao nhiêu?

Ví dụ về giới hạn kích thước hàng . Giới hạn được thực thi bất kể công cụ lưu trữ nào, mặc dù công cụ lưu trữ có thể có khả năng hỗ trợ các hàng lớn hơn. 65,535 bytes is demonstrated in the following InnoDB and MyISAM examples. The limit is enforced regardless of storage engine, even though the storage engine may be capable of supporting larger rows.