Thay đổi utf8 thành utf8mb4 mysql

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ôi

Vấ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 MySQL

Mộ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
    tutor plugins enable mysql8utf8mb4
    
    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ủa
    tutor plugins enable mysql8utf8mb4
    
    8. Đối chiếu này không có sẵn trong MySQL 5. 7
  • 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
    tutor plugins enable mysql8utf8mb4
    
    6
  • Nhiều trường được tạo dưới dạng varchar[255] vì mã hóa ký tự 3 byte của
    tutor plugins enable mysql8utf8mb4
    
    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ất

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ọc

hì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ối

hì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

Đề cương khóa học từ 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
    tutor config save
    
    1 vào tutor/templates/apps/openedx/config/partials/auth. yml [DATABASES[‘default’][‘OPTIONS’][‘charset’] = ‘utf8mb4’]
tutor plugins install //gist.githubusercontent.com/Abdess/3ed9ed1d42821d00a5cf2481870df26f/raw/tutor-mysql8utf8mb4.yml
______0
tutor config save
tutor plugins enable mysql8utf8mb4
1

Tô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 utf8mb3
tutor plugins enable mysql8utf8mb4
3
tutor plugins enable mysql8utf8mb4
4
tutor plugins enable mysql8utf8mb4
5
tutor plugins enable mysql8utf8mb4
6
tutor plugins enable mysql8utf8mb4
7
tutor plugins enable mysql8utf8mb4
8
tutor plugins enable mysql8utf8mb4
0
tutor plugins enable mysql8utf8mb4
0
tutor plugins enable mysql8utf8mb4
2
tutor 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ình

hì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ình

hì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”

bụng

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

iamCristYe

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

  1. 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]
  2. 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]
  3. 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?]
  4. 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

Cách chuyển đổi UTF

Bước 1. kiểm tra dữ liệu trong cột đó để đảm bảo rằng kích thước chuỗi tối đa trong cột đó là

Chủ Đề