utf thực sự là utfmb3 và có thể sử dụng tối đa 3 byte cho mỗi ký tự trong khi utfmb4 có thể sử dụng 4 byte cho mỗi ký tự. Đối với các cột VARCHAR, điều này thường không có nhiều khác biệt vì MySQL sẽ chỉ lưu trữ bao nhiêu byte nếu cần (trừ khi bạn đã tạo bảng MyISAM của mình bằng ROW_FORMAT =FIXED).
Tuy nhiên, trong quá trình thực thi truy vấn, MySQL có thể tạo các bảng tạm thời trong công cụ lưu trữ MEMORY không hỗ trợ các hàng có độ dài thay đổi. Các bảng tạm thời này có kích thước tối đa và nếu kích thước đó vượt quá, các bảng tạm thời sẽ được chuyển đổi thành các bảng trong MyISAM / InnoDB (tùy thuộc vào phiên bản MySQL của bạn). Biến trạng thái Created_tmp_disk_tables
sẽ được tăng lên mỗi khi điều này xảy ra. Nếu vậy, hãy thử xem nó có giúp tăng giá trị của max_heap_table_size
không và tmp_table_size
.
Ngoài ra, hãy nâng cấp lên MySQL 8.0 trong đó công cụ lưu trữ mới hỗ trợ các hàng có độ dài thay đổi được sử dụng cho các bảng tạm thời nội bộ.