Nutmeg đã giới thiệu một lỗi mới trong các phác thảo trong đó vấn đề cơ bản là việc chúng tôi sử dụng mã hóa bộ ký tự
tutor plugins enable mysql8utf8mb4
4 cho các bảng MySQL của chúng tôiVấn đề. Mã hóa
tutor plugins enable mysql8utf8mb4
4 của MySQL không phải là UTF-8 “thực”. Đó là mã hóa ba byte thiếu một số ký tự nhất định, bao gồm cả biểu tượng cảm xúc. Chúng tôi muốn nâng cấp lên tutor plugins enable mysql8utf8mb4
6, đây là dữ liệu UTF-8 thực của MySQL. Đây là một vấn đề đã xảy ra trong một thời gian, nhưng theo thời gian nó sẽ chỉ khiến chúng ta khó chịu hơn khi một số bộ lưu trữ nội dung của chúng ta được chuyển sang MySQLMột số phần có liên quan làm cho việc di chuyển trở nên thú vị
- Ngoài việc nhắm mục tiêu
6 cho mã hóa bộ ký tự, chúng tôi có thể muốn chuyển đối chiếu sang MySQL 8 mới. 0. 1 mặc định củatutor plugins enable mysql8utf8mb4
8. Đối chiếu này không có sẵn trong MySQL 5. 7tutor plugins enable mysql8utf8mb4
- Chúng ta cần hoàn thành quá trình di chuyển từ MySQL 5. 7 đến 8. 0 tại một số điểm sớm [Olive?], bởi vì 5. 7 cuối đời là tháng 10. 2023. Nếu đó vẫn là một thay đổi đột phá, chúng tôi có thể cố gắng kết hợp các thay đổi mã hóa cùng một lúc
- Về lý thuyết, nền tảng edx có thể chạy bằng cách sử dụng kể từ Nutmeg, nhờ vào công việc được thực hiện bởi 2U. Theo hiểu biết của tôi, chưa có ai thực sự lao vào và dùng thử MySQL 8. 0 chưa mặc dù
- Đường dẫn di chuyển mà tôi biết bao gồm sao lưu → xuất → nhập, điều này có thể không khả thi đối với những người điều hành các trang web lớn
- Tôi không biết liệu có cách hợp lý nào để chạy trong "chế độ hỗn hợp" để triển khai dần dần hay không, vì cài đặt Django cũng phải được điều chỉnh để truyền dữ liệu bằng cách sử dụng
6tutor plugins enable mysql8utf8mb4
- Nhiều trường được tạo dưới dạng varchar[255] vì mã hóa ký tự 3 byte của
4 có nghĩa là đó là trường char lớn nhất mà bạn có thể tạo mà vẫn phù hợp với giới hạn chỉ số ký tự 767 của InnoDB. Các bảng mới hơn sử dụng định dạng hàng NĂNG ĐỘNG có thể vượt qua điều này, nhưng làm như vậy có thể ảnh hưởng đến hiệu suấttutor plugins enable mysql8utf8mb4
Trong một thế giới lý tưởng, sẽ thật tuyệt nếu có thứ gì đó thực hiện nâng cấp liền mạch, không ngừng hoạt động. Một bước xuống từ đó có thể là một tập lệnh Tutor có thể thực hiện quá trình nâng cấp với một số thời gian chết? . 0 với cài đặt bộ ký tự và đối chiếu mới
Nếu bạn có suy nghĩ về điều này hoặc có kinh nghiệm chạy Open edX trên MySQL 8. 0, tôi rất muốn nghe từ bạn
Cảm ơn ba mẹ.
Chỉ cần thử nghiệm trên phiên bản mới nhất của MySQL. Mọi thứ dường như đang hoạt động tốt… ít nhất là vào lúc này
Chỉ nhận thấy một điều kỳ lạ trong quá trình di chuyển. Tiêu đề của một trong các khóa học “Apprendre à apprendre” đã trở thành “Apprendre à apprendre”. Và đó chỉ là tiêu đề của khóa học, mọi thứ khác đều được viết tốt
Ảnh chụp màn hình đề cương khóa họchình ảnh1244×740 41. 1KB
Đối với quá trình di chuyển, một trong các plugin @regis đã được rẽ nhánh và sửa đổi. Plugin có thể được cài đặt tại địa chỉ này. Plugin Tutor để cài đặt phiên bản MySQL mới nhất và thêm hỗ trợ của utf8mb4 · GitHub
Ta có thể thấy rằng Tutor sử dụng phiên bản MySQL mới nhất với đối chiếu utf8mb4_0900_ai_ci
Ảnh chụp màn hình thiết bị đầu cuốihình ảnh836×84 5. 12KB
hình ảnh806×302 9. 62KB
CẬP NHẬT
Có vẻ như hoạt động tốt trên bản cài đặt mới
hình ảnh1649×679 37. 3KB
Cách cài đặt mới được thực hiện
Tóm lược- thêm
1 vào tutor/templates/apps/openedx/config/partials/auth. yml [DATABASES[‘default’][‘OPTIONS’][‘charset’] = ‘utf8mb4’]tutor config save
tutor plugins install //gist.githubusercontent.com/Abdess/3ed9ed1d42821d00a5cf2481870df26f/raw/tutor-mysql8utf8mb4.yml
______0tutor config save
tutor plugins enable mysql8utf8mb4
1Tôi đã trích xuất lược đồ cơ sở dữ liệu từ bản cài đặt mới với tham số
tutor config save
1 để thấy sự khác biệt khi có và không có plugin. đã mởx_schema5. sql [498. 6 KB]
đã mởx_schema8. sql [515. 6KB]Ví dụ về bảng MySQL5 [trái] và MySQL8 [phải]
hình ảnh2713×784 191 KB
Đối với thử nghiệm, tôi thay thế utf8mb3 còn lại
Thay thế còn lại utf8mb3tutor plugins enable mysql8utf8mb4
3tutor plugins enable mysql8utf8mb4
4tutor plugins enable mysql8utf8mb4
5tutor plugins enable mysql8utf8mb4
6tutor plugins enable mysql8utf8mb4
7tutor plugins enable mysql8utf8mb4
8tutor plugins enable mysql8utf8mb4
0tutor plugins enable mysql8utf8mb4
0tutor plugins enable mysql8utf8mb4
2tutor plugins enable mysql8utf8mb4
3Đó là khi tôi thay thế utf8mb3 bằng utf8mb4 thì lỗi mã hóa xuất hiện
Ảnh chụp màn hìnhhình ảnh1253×532 23. 3KB
Nhưng khi tôi thực hiện sửa đổi trong studio, vấn đề sẽ biến mất
Ảnh chụp màn hìnhhình ảnh1276×460 19. 9KB
Tôi cũng vừa nhận thấy một lỗi khác. LMS hiển thị n-1 thay đổi.
Ví dụ.
- Nếu tôi thay thế “giới thiệu” bằng "giới thiệu s" thì “giới thiệu” được hiển thị trên LMS
- “giới thiệu s” → “giới thiệu d” = “giới thiệu s”
- “giới thiệu d” → “giới thiệu” = “giới thiệu d”
Chỉ nhận thấy một điều kỳ lạ trong quá trình di chuyển. Tiêu đề của một trong các khóa học “Apprendre à apprendre” đã trở thành “Apprendre à apprendre”. Và đó chỉ là tiêu đề của khóa học, mọi thứ khác đều được viết tốt
Đó là một chút rắc rối. Tôi tò mò muốn biết dữ liệu được xuất cho mục nhập đó trông như thế nào
Nếu hiểu biết của tôi là chính xác, để tránh thời gian chết, chúng ta có thể làm như sau
- cập nhật bộ ký tự cơ sở dữ liệu mặc định. [Giá trị này chỉ được sử dụng làm giá trị mặc định cho các bảng trong tương lai]
- cập nhật bộ ký tự bảng mặc định [Giá trị này chỉ được sử dụng làm giá trị mặc định cho các cột trong tương lai, tại thời điểm này vẫn chưa thể chèn utf8mb4]
- cập nhật bộ ký tự cột [tại thời điểm này, utf8mb4 có thể được chèn qua MySQL CLI nhưng không thể thông qua Django vì nó vẫn đang sử dụng kết nối utf8mb3?]
- triển khai lại ứng dụng Django với cài đặt kết nối utf8mb4 mới
Ah, có lẽ đó là phần tôi đang thiếu. Tôi không nhận ra rằng có thể nâng cấp dần các bảng riêng lẻ lên
tutor plugins enable mysql8utf8mb4
6 trong khi kết nối Django là tutor plugins enable mysql8utf8mb4
4 và mọi thứ vẫn hoạt động bình thường đối với các ký tự UTF-8 3 byte. Nếu đúng như vậy thì thật tuyệt vời, đặc biệt đối với các trang web lớn cần hết sức cẩn thận về hồi quy hiệu suất