Hướng dẫn mysql default character set utf8mb4 - bộ ký tự mặc định mysql utf8mb4
Từ MySQL 8.0, UTF8MB4 là bộ ký tự mặc định và mặc định & NBSP; đối chiếu cho UTF8MB4 là UTF8MB4_0900_AI_CI. MySQL 8.0 cũng đang đến & nbsp; với một bộ cộng đồng Unicode hoàn toàn mới cho ký tự UTF8MB4 & NBSP; được đặt.utf8mb4 is the default character set, and the default collation for utf8mb4 is utf8mb4_0900_ai_ci. MySQL 8.0 is also coming with a whole new set of Unicode collations for the utf8mb4 character set. Show Điều này sẽ cho phép sử dụng ký tự Unicode 9.0.0 hoàn chỉnh được đặt trong & nbsp; MySQL và đối với các ứng dụng mới, đây là một tin tuyệt vời. Nhưng những gì về các ứng dụng cũ & nbsp; Làm thế nào sẽ gây đau đớn khi hiện đại hóa bộ ký tự & nbsp; sử dụng cho một ứng dụng hiện có dựa trên 5,7? Giới thiệuTrước tiên, chúng ta cần hiểu cách MySQL hoạt động liên quan đến ký tự & nbsp; bộ và đối chiếu: Mỗi lược đồ (còn được gọi là cơ sở dữ liệu của người Viking trong MySQL), có một bộ ký tự mặc định & nbsp; ký tự và đối chiếu mặc định. Vì vậy, tất cả các bảng được tạo trong đó & nbsp; theo mặc định sẽ kế thừa bộ ký tự và đối chiếu từ & nbsp; lược đồ. Để thay đổi điều này, chạy:
Mỗi bảng cũng có một bộ ký tự mặc định và một đối chiếu mặc định & nbsp; theo mặc định được kế thừa bởi các cột trong bảng. & nbsp; để thay đổi bộ ký tự mặc định của bảng & nbsp; chạy:
Việc thay đổi bộ/đối chiếu ký tự mặc định của lược đồ/bảng sẽ không thay đổi bất kỳ cột hoặc dữ liệu hiện có nào. Hai sự thật này ngụ ý rằng nếu bạn nâng cấp từ 5,7 lên 8,0 và sau & nbsp; việc nâng cấp tạo ra không có lược đồ mới, MySQL sẽ hoạt động như trước với & nbsp; liên quan đến các bộ và đối chiếu ký tự. Ngoài ra, bạn cần biết rằng đối với mỗi ký tự được đặt trong mysql & nbsp; có một đối chiếu mặc định và mỗi & nbsp; đối chiếu ngụ ý một ký tự & nbsp; set. Điều này có nghĩa là trong:
Col1 Nhận đối chiếu UTF8MB4_0900_AI_CI và COL2 Nhận ký tự & NBSP; Đặt UTF8MB4. Vì vậy, để tận dụng các đối chiếu mới cho các ứng dụng hiện tại & NBSP; đã nâng cấp từ 5,7, người ta cần thực hiện một dự án di chuyển. Đầu tiên, bạn cần phân tích Schemata của mình và tìm ra cột nào trong UTF8MB4. Sau đó, bạn cần phải xem xét một số & nbsp; các thuộc tính của các cột này. Chìa khóaCác bảng Innodb có chiều dài khóa tối đa là 3072 byte. Giá trị này phụ thuộc vào định dạng hàng Innodb & nbsp; và innodb_page_size, vì vậy bạn sẽ cần kiểm tra tài liệu & nbsp; để tìm ra giới hạn của bạn là gì nếu bạn không chạy với cài đặt mặc định & nbsp; Một ký tự UTF8MB4 sử dụng 1-4 byte, có nghĩa là độ dài tối đa & nbsp; của cột char/varchar là khóa, sẽ là 767 ký tự. Vì vậy, nếu & nbsp; bạn có các cột varchar/char chính có độ dài lớn hơn 767 ký tự, bạn sẽ phải xem xét để rút ngắn độ dài, & nbsp; thay đổi thành văn bản hoặc thay đổi cài đặt innodb. Chỉ sốKhi việc đối chiếu một cột thay đổi, ngay cả khi ký tự đặt vẫn giữ & nbsp; giống nhau, các chỉ số sẽ được tái tạo. Đối với khối lượng dữ liệu lớn, điều này có thể & nbsp; dành thời gian đáng kể và bảng sẽ bị khóa trong chỉ số & nbsp; tạo. Những ràng buộc độc đáoVì các đối chiếu là khác nhau, việc thay đổi bộ ký tự của bảng & nbsp; có thể phá vỡ các ràng buộc duy nhất (khóa duy nhất hoặc khóa chính, v.v.). Ví dụ đơn giản nhất là nếu bạn có & nbsp; tạo một cột ký tự với các cài đặt mặc định trong MySQL 5.7, cột này sẽ có ký tự Latin1 có một lần nữa có mặc định & nbsp; Collation latin1_swedish_ci. Trong đối chiếu này, ’A,! =‘ Å, ‘A,! Nếu cột này được thay đổi thành UTF8MB4 có & NBSP; đối chiếu mặc định UTF8MB4_0900_AI_CI trong MySQL 8.0, ràng buộc độc đáo & NBSP; có thể bị phá vỡ, vì trong đối chiếu này, ’A Trong & nbsp; Tình huống này, bạn phải xem xét đối chiếu nào bạn thực sự muốn. Đối với & nbsp; dữ liệu Thụy Điển, một giải pháp thay thế có thể là utf8mb4_sv_0900_ai_ci, chia sẻ & nbsp; nhiều thuộc tính với Latin1_swedish_ci. Nhưng giải pháp chính xác sẽ & nbsp; phụ thuộc vào tập dữ liệu thực tế của bạn và nhu cầu của ứng dụng của bạn.latin1 which again has the default collation latin1_swedish_ci. In this collation, ‘a’ != ‘å’, ‘a’ != ‘ä’ and ‘o’ != ‘ö’. If this column is changed to utf8mb4 which has the default collation utf8mb4_0900_ai_ci in MySQL 8.0, unique constraint may be broken, since in this collation, ‘a’=’å’=’ä’ and ‘o’=ö’. In this situation, you must consider which collation you really want. For Swedish data, an alternative may be utf8mb4_sv_0900_ai_ci, which share many properties with latin1_swedish_ci. But the correct solution will depend on your actual data set and the needs of your application. Để kiểm tra xem một cột V có ràng buộc duy nhất trong bảng T có thể chuyển đổi thành UTF8MB4 với một số đối chiếu hay không, bạn có thể & nbsp; làm:
Nếu kết quả lớn hơn 0, bạn phải thay đổi dữ liệu của mình hoặc & nbsp; chọn một đối chiếu phù hợp hơn cho dữ liệu của bạn. Để kiểm tra cặp giá trị nào gây ra sự cố, bạn có thể & nbsp; làm:
Không có đối chiếu padCác đối chiếu UTF8MB4 UNICODE 9.0.0 mới không phải là đối chiếu PAD (trái ngược với các đối chiếu cũ là các đối chiếu không gian pad). Điều này & nbsp; có nghĩa là các không gian kéo dài trong các chuỗi sẽ có ý nghĩa đối với các cột Varchar & nbsp; Kiểm tra các đối chiếu MySQL là không gian pad và không có pad nào bằng cách làm:
Điều này có thể có ý nghĩa tùy thuộc vào ứng dụng của bạn và dữ liệu được lưu trữ. Ví dụ nhỏChúng ta hãy giả sử rằng chúng ta có bảng sau sau khi nâng cấp từ 5.7:
| Oslo & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | & nbsp; & nbsp; & nbsp; & nbsp; 666759 |
mysql> với được chuyển đổi AS (chọn Chuyển đổi (Tên sử dụng UTF8MB4) đối chiếu UTF8MB4_0900_AI_CI ASVFROM CITY), vi phạm dưới dạng (selectvfrom đã chuyển đổi nhóm ByVhaving Count (*)> 1) chọn số lượng (*) từ vi phạm;
| 1 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
+---------+--------+
Và nếu bạn chỉ cố gắng chuyển đổi cột, bạn sẽ nhận được như mong đợi:
Có một số cách có thể từ đây:東京 (Tokyo):
Sự kết luậnBlog này không có nghĩa là một hướng dẫn đầy đủ cho việc di chuyển, & nbsp; và các ví dụ có thể không mở rộng cho khối lượng dữ liệu khổng lồ, nhưng tôi hy vọng tôi đã làm sáng tỏ các vấn đề mà bạn có thể bị vướng vào & NBSP; khi bạn chuyển sang UTF8MB4. Ngoài ra, vui lòng kiểm tra các bài đăng trước đó của chúng tôi phác thảo các cải tiến của chúng tôi đối với hỗ trợ UTF8 trong MySQL 8.0, bắt đầu với bài viết giới thiệu của chúng tôi trên Sushi = Bia. Charset mặc định UTF8MB4 là gì?Tags: Kiểu dữ liệu. Từ MySQL 8.0, UTF8MB4 là bộ ký tự mặc định và đối chiếu mặc định cho UTF8MB4 là UTF8MB4_0900_AI_CI.utf8mb4 is the default character set, and the default collation for utf8mb4 is utf8mb4_0900_ai_ci.
Các ký tự mặc định được đặt trong MySQL là gì?Bộ và đối chiếu ký tự máy chủ MySQL mặc định là Latin1 và latin1_swedish_ci, nhưng bạn có thể chỉ định các bộ ký tự tại các cấp độ máy chủ, cơ sở dữ liệu, bảng, cột và chuỗi.latin1 and latin1_swedish_ci , but you can specify character sets at the server, database, table, column, and string literal levels.
Tôi nên sử dụng UTF8MB4 hoặc UTFNếu bạn cần cơ sở dữ liệu, đừng sử dụng MySQL hoặc Mariadb.Sử dụng Postgresql.Nếu bạn cần sử dụng MySQL hoặc MariaDB, không bao giờ sử dụng UTF8.Luôn luôn sử dụng UTF8MB4 khi bạn muốn UTF-8.Always use “utf8mb4” when you want UTF-8.
Sự khác biệt giữa UTF8MB4 và UTF là gìUTF-8 chỉ có thể lưu trữ các ký tự 1, 2 hoặc 3 byte, trong khi UTF8MB4 cũng có thể lưu trữ 4 ký tự byte.UTF-8 là một tập hợp các ký tự được đưa ra bởi UTF8MB4.. utf-8 is a subset of characters given by utf8mb4 .
Làm cách nào để thay đổi UTF8MB4 thành UTFĐể giải quyết vấn đề, hãy mở tệp SQL đã xuất, tìm kiếm và thay thế UTF8MB4 bằng UTF8, sau khi tìm kiếm đó và thay thế UTF8MB4_UNICODE_520_CI bằng UTF8_General_CI.Lưu tệp và nhập nó vào cơ sở dữ liệu của bạn.Sau đó, thay đổi WP-config.Tùy chọn Charset PHP cho UTF8 và phép thuật bắt đầu.open the exported SQL file, search and replace the utf8mb4 with utf8 , after that search and replace the utf8mb4_unicode_520_ci with utf8_general_ci . Save the file and import it into your database. After that, change the wp-config. php charset option to utf8 , and the magic starts. |