Khi bạn đang khôi phục cơ sở dữ liệu từ kết xuất MySQL, bạn có thể giải quyết vấn đề của mình đồng thời kiểm chứng cơ sở dữ liệu trong tương lai bằng cách thay đổi bộ ký tự và đối chiếu cho các bảng, hàm và thủ tục của bạn. Có một số thay đổi giữa MySQL 5.7 và 8.x, vì vậy đây thực sự là thời điểm tốt nhất để làm điều đó.
Đây là những gì bạn có thể làm với mỗi TẠO RA
bản tường trình:
Thay thế cái BỘ KÝ TỰ MẶC ĐỊNH
đến utf8mb4
Thay thế cái THU THẬP
đến utf8mb4_unicode_ci
(Đối với bảng) Đảm bảo ĐỘNG CƠ
được đặt thành InnoDB
Ghi chú: Bạn không muốn sử dụng MyISAM nữa, bạn cũng không muốn kết hợp ĐỘNG CƠ
các loại có truy vấn, vì đó là một điểm nhấn hiệu suất khá quan trọng.
Thực hiện tất cả những điều này với trình soạn thảo văn bản ưa thích của bạn, sau đó chạy quy trình nhập vào cơ sở dữ liệu MySQL mới. Đảm bảo thiết lập cơ sở dữ liệu BỘ KÝ TỰ MẶC ĐỊNH
và THU THẬP
các giá trị giống như bạn có cho các bảng, hàm và thủ tục.
Lý do cho các đề xuất:
MySQL 8.0 là một bước khởi đầu đáng kể so với dòng 5.x với rất nhiều mục không được dùng nữa trước 5.2 đã bị xóa hoàn toàn. Điều này bao gồm các loại cột nhất định, cũng như các đối chiếu. Quá trình nhập sẽ cố gắng tự động điều chỉnh các phần tử không dùng nữa thành các phần tử tương đương hiện đại của chúng, nhưng thường tạo ra một mớ hỗn độn các bộ ký tự và đối chiếu.
Các utf8mb4_unicode_ci
đã được chứng minh là đối chiếu đáng tin cậy nhất khi làm việc với các ký tự nhiều byte, chẳng hạn như biểu tượng cảm xúc và những ký tự được sử dụng trong các ngôn ngữ không phải tiếng Anh.Mặc dù nó sẽ sử dụng nhiều dung lượng đĩa hơn một chút, nhưng điều này sẽ đảm bảo (các) ứng dụng của bạn có thể xử lý bất kỳ ký tự nào ném vào nó. Các _ci
bit ở cuối đảm bảo các giá trị được coi là phân biệt chữ hoa chữ thường khi tham gia và thực hiện tra cứu.
Thay thế tất cả các CHARSET
và THU THẬP
các giá trị sẽ đảm bảo bạn không nhận được Kết hợp đối chiếu bất hợp pháp
lại lỗi ... trừ khi ...
Những điều cần xem xét với các thủ tục và trình kích hoạt được lưu trữ
MySQL 8.0 dường như mong đợi một chút cụ thể hơn khi tạo các bảng tạm thời trong các thủ tục được lưu trữ. Nếu bạn sử dụng bảng tạm thời, hãy đảm bảo xác định trước chúng trong mã giống như cách bạn làm với bảng thông thường. Cú pháp khá giống nhau, ngoại trừ việc bạn thêm một từ bổ sung:
THẢ BẢNG TẠM THỜI NẾU TỒN TẠI `YearlySums`;
TẠO BẢNG TẠM THỜI NẾU KHÔNG TỒN TẠI `YearlySums ` (
...
) ENGINE=InnoDB CHARSET MẶC ĐỊNH=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Điều này sẽ đảm bảo bạn không gặp phải Kết hợp đối chiếu bất hợp pháp
lỗi khi làm việc với các thủ tục được lưu trữ.
Nếu bảng của bạn có TRƯỚC KHI CHÈN
hoặc TRƯỚC CẬP NHẬT
kích hoạt và các bảng đó được điền thông qua các thủ tục được lưu trữ, bạn sẽ muốn thực hiện một lượng lớn thử nghiệm trước khi đưa cơ sở dữ liệu vào cài đặt sản xuất. Oracle đã giới thiệu một lỗi khá nghiêm trọng trong 8.0.25 có thể khiến công cụ Máy chủ MySQL gặp sự cố trong một số trường hợp nhất định khi một TRƯỚC
trình kích hoạt đang xử lý các hàng như một phần của xác thực dữ liệu, nhưng chỉ khi dữ liệu đó được cung cấp bởi một thủ tục được lưu trữ. Vấn đề đã tồn tại hơn một năm và Oracle dường như không quan tâm.
Đừng để lỗi này làm hỏng kỳ nghỉ năm mới của bạn như nó đã làm của tôi năm ngoái