Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 27972|Відповідь: 0

[Джерело] Різниця між utf8 і utf8mb4 у MySQL

[Копіювати посилання]
Опубліковано 21.04.2021 18:01:22 | | | |
Невідомий набір символів: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Вступ

MySQL додав це кодування utf8mb4 після версії 5.5.3, тобто більшість байтів 4, і спеціально використовується для сумісності з чотирибайтовим юнікодом. На щастя, utf8mb4 є надмножиною utf8, і іншого перетворення не потрібне, окрім зміни кодування на utf8mb4. Звісно, щоб заощадити місце, зазвичай достатньо використовувати utf8.

2. Опис змісту

Як уже згадувалося, оскільки utf8 може зберігати більшість китайських ієрогліфів, навіщо використовувати utf8mb4? Максимальна довжина символу кодування UTF8, яку підтримує MySQL, становить 3 байти, і якщо ви зустрінете широкий символ розміром 4 байти, ви вставите виняток. Максимальний символ Unicode, закодований UTF-8 з трьох байт, дорівнює 0xffff, що є базовою багатомовною площиною (BMP) в Unicode. Тобто будь-який символ Unicode, який не входить у базову багатотекстову площину, не може зберігатися за допомогою набору символів utf8 Mysql. Серед них — емодзі (емодзі — це спеціальне кодування Unicode, яке часто зустрічається на телефонах iOS та Android), а також багато рідко використовуваних китайських ієрогліфів, а також будь-які нові символи Unicode і інше.

3. Корінь проблеми

Оригінальний формат UTF-8 використовував від одного до шести байтів і міг кодувати до 31 символу. Остання специфікація UTF-8 використовує лише від одного до чотирьох байтів і може кодувати до 21 біта, що саме відображає всі 17 площин Unicode. utf8 — це набір символів у Mysql, який підтримує лише символи UTF-8 довжиною до трьох байт, що є базовою багатотекстовою площиною в Unicode.

Чому UTF8 у Mysql підтримує лише символи UTF-8 з максимальною кількістю трьох байтів? Я думав про це, можливо, тому що коли Mysql тільки розробляли, у Unicode не було допоміжного плану. Тоді комітет Unicode ще мріяв про «65 535 символів — це достатньо для всього світу». Довжина рядків у Mysql рахує символи, а не байти, і для типів даних CHAR рядки мають бути достатньо довгими. При використанні набору символів utf8 довжина, яку потрібно зберігати, — це найдовша довжина символу utf8, помножена на довжину рядка, тому природно обмежити максимальну довжину utf8 3, наприклад, CHAR(100) Mysql зберігає 300 байтів. Щодо того, чому наступні версії не підтримують 4-байтові символи UTF-8, думаю, одна з причин зворотної сумісності, а інша — що символи поза базовою багатомовною площиною рідко використовуються.

Для збереження 4-байтових символів UTF-8 у MySQL потрібен набір символів utf8mb4, але він підтримується лише після версії 5.5.3 (див. версію: select version(); )。 Я вважаю, що для кращої сумісності завжди слід використовувати utf8mb4 замість utf8.  Для даних типу CHAR utf8mb4 займає більше місця, і згідно з офіційною рекомендацією Mysql, використовуйте VARCHAR замість CHAR.







Попередній:Просте використання фреймворку ORM SqlSugar
Наступний:Заголовок HTTP-запиту Expect детально пояснюється
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com