Điểm:1

Bản nâng cấp MySQL của Ubuntu 20.04.2 đã làm hỏng dữ liệu của chúng tôi...làm cách nào để khắc phục?

lá cờ mx

Chúng tôi đã nâng cấp từ Ubuntu Server 18.04.5 LTS lên Ubuntu Server 20.04.2 LTS. Mọi thứ có vẻ ổn cho đến hôm nay khi chúng tôi nhận thấy rằng một trong các ứng dụng của chúng tôi không còn hoạt động. MySQL dường như có các ký tự Unicode bị xáo trộn (được lưu trữ dưới dạng UTF-8) trong cơ sở dữ liệu khi phần mềm cơ sở dữ liệu được nâng cấp.

Ví dụ: ký tự UTF-8:

0xF0 0x9F 0x8C 0xB5

Đã trở thành:

0xC3 0xB0 0xC5 0xB8 0xC5 0x92 0xC2 0xB5

Có vẻ như một cái gì đó trong quá trình nâng cấp đã mã hóa dữ liệu thành UTF-8 mặc dù dữ liệu đã sẵn sàng UTF-8 hợp lệ.

Bộ ký tự trên bàn trước khi nâng cấp là 'utf8'. Bây giờ bộ ký tự của bảng là 'utf8mb3'.

Không biết phải làm gì ở đây để khắc phục sự cố.

lá cờ in
Có phải vấn đề với ứng dụng Django không?
lá cờ mx
Không. Cũng không chắc tại sao ai đó lại đánh giá thấp điều này. Phiếu phản đối chỉ dành cho "không hiển thị bất kỳ nghiên cứu hoặc nỗ lực nào, không rõ ràng hoặc không hữu ích." Không ai trong số đó áp dụng. Tôi đã thực hiện nghiên cứu và điều tốt nhất tôi tìm thấy là: https://stackoverflow.com/questions/11436594/how-to-fix-double-encoded-utf8-characters-in-an-utf-8-table Nhưng một truy vấn SQL duy nhất khác xa với một giải pháp thực tế. Việc nâng cấp lên Ubuntu đã nâng cấp MySQL lên v8.0 và thay đổi các bảng cũng như dữ liệu trong đó theo cách bị hỏng.
lá cờ in
Lý do tôi hỏi về việc sử dụng Django là vì một số hệ thống, chẳng hạn như hệ thống đó, có những kỳ vọng rất đặc biệt từ công cụ DB dựa trên cấu hình kết nối. Bạn nói rằng điều này đang xảy ra với *một* hệ thống, không phải tất cả, vì vậy giả định là một ứng dụng cứng nhắc cần được cập nhật. UTF8 (trong MySQL 5.x trở xuống) không được dùng để thay thế cho Utf8mb4, nhưng cần phải xây dựng lại bảng để chuyển đổi các bảng cơ sở dữ liệu cũ thành bộ ký tự hiện tại. Khi câu hỏi đặt ra, không có đủ chi tiết để đưa ra bất kỳ đề xuất cụ thể nào
lá cờ mx
Nó gần như chắc chắn không chỉ giới hạn trong một ứng dụng. Đây chỉ là một ứng dụng mà chúng tôi nhận thấy cho đến nay có xu hướng sử dụng Unicode (đặc biệt là biểu tượng cảm xúc). Dữ liệu được tuần tự hóa trong cơ sở dữ liệu (mà chúng tôi thực hiện RẤT NHIỀU) và trình giải tuần tự hóa đang chặn dữ liệu vì MySQL đang trả về các ký tự UTF-8 được mã hóa kép. Bản thân việc sử dụng ứng dụng khách MySQL cho thấy dữ liệu được mã hóa kép (nghĩa là không có vấn đề gì với ứng dụng).
lá cờ mx
Vấn đề là bất kỳ ai chạy MySQL trong Ubuntu Server LTS 18.04 và nâng cấp lên 20.04 và có các bảng trong cơ sở dữ liệu của họ với bộ ký tự 'utf8' sẽ gặp phải cùng một vấn đề. Do đó, hoàn toàn phù hợp và hữu ích và cần một bản sửa lỗi đang hoạt động.
lá cờ mx
Được rồi, sau khi vật lộn với điều này trong nhiều giờ, tôi có một giải pháp MỘT PHẦN: Trước tiên, hãy chuyển đổi bộ ký tự của bảng thành `utf8mb4` thông qua `ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4`. Sau đó, đối với mỗi cột bị ảnh hưởng, hãy sử dụng truy vấn SQL từ bài đăng SO để thay đổi dữ liệu trong cột. Trước tiên, hãy làm tất cả những điều đó trong một tập hợp các bảng cơ sở dữ liệu được nhân bản, riêng biệt để tránh vô tình làm mọi thứ trở nên tồi tệ hơn. Nhưng như tôi đã nói, đây là một giải pháp tạm thời, từng phần *xuất hiện* để làm cho dữ liệu hợp lệ nhưng còn lâu mới đạt được câu trả lời. Tôi sẽ cần xây dựng một công cụ để xác định mức độ phổ biến của vấn đề.
lá cờ mx
Được rồi, sau RẤT NHIỀU thời gian nữa, tôi đã xử lý tất cả dữ liệu của chúng ta. Phương pháp trên hoạt động, loại. Tôi *rất* khuyên bạn nên xuất dữ liệu của mình bằng kết nối `utf8`, thực hiện nâng cấp MySQL, chỉ thay đổi các trường có ký tự Unicode, sau đó khôi phục dữ liệu bị hỏng từ dữ liệu đã xuất (tức là quá trình xuất của bạn là chính xác, MySQL đôi khi thực hiện sai). Bởi vì https://stackoverflow.com/questions/11436594/how-to-fix-double-encoded-utf8-characters-in-an-utf-8-table SẼ làm hỏng hoàn toàn dữ liệu ở đâu đó trong cơ sở dữ liệu! Xử lý hàng triệu hàng dữ liệu là cách tôi biết điều đó là đúng.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.