Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 27972|Risposta: 0

[Fonte] La differenza tra utf8 e utf8mb4 in MySQL

[Copiato link]
Pubblicato il 2021-4-21 18:01:22 | | | |
Set caratteri sconosciuto: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Introduzione

MySQL ha aggiunto questa codifica utf8mb4 dopo la 5.5.3, il che significa la maggior parte dei bytes 4, ed è specificamente usato per essere compatibile con unicode a quattro byte. Fortunatamente, utf8mb4 è un superset di utf8, e non è necessaria altra conversione se non cambiare la codifica in utf8mb4. Ovviamente, per risparmiare spazio, generalmente basta usare utf8.

2. Descrizione del contenuto

Come detto sopra, dato che utf8 può salvare la maggior parte dei caratteri cinesi, perché usare utf8mb4? La lunghezza massima del carattere della codifica UTF8 supportata da MySQL è di 3 byte, e se incontri un carattere ampio di 4 byte, inserirai un'eccezione. Il carattere Unicode massimo codificato da UTF-8 di tre byte è 0xffff, che è il piano multilingue base (BMP) in Unicode. Cioè, qualsiasi carattere Unicode che non sia nel piano multitesto base non può essere memorizzato utilizzando il set di caratteri utf8 di Mysql. Questi includono emoji (Emoji è una codifica Unicode speciale comunemente presente su telefoni iOS e Android), molti caratteri cinesi poco comuni, oltre a nuovi caratteri Unicode, e altro ancora.

3. La causa principale del problema

Il formato originale UTF-8 utilizzava da uno a sei byte e poteva codificare fino a 31 caratteri. L'ultima specifica UTF-8 utilizza solo da uno a quattro byte e può codificare fino a 21 bit, che rappresenta esattamente tutti i 17 piani Unicode. UTF8 è un set di caratteri in MySQL che supporta solo caratteri UTF-8 fino a tre byte, che è il piano multi-testo base in Unicode.

Perché UTF8 in MySQL supporta solo i caratteri UTF-8 con un massimo di tre byte? Ci ho pensato, forse perché quando Mysql è stato sviluppato per la prima volta, Unicode non aveva un piano ausiliario. All'epoca, il Comitato Unicode sognava ancora "65.535 caratteri sono sufficienti per il mondo intero". Le lunghezze delle stringhe in Mysql contano i caratteri invece che i byte, e per i tipi di dati CHAR le stringhe devono essere sufficientemente lunghe. Quando si utilizza il set di caratteri utf8, la lunghezza da preservare è la lunghezza più lunga del carattere utf8 moltiplicata per la stringa, quindi è naturale limitare la lunghezza massima utf8 a 3, ad esempio, CHAR(100) Mysql manterrà 300 byte. Per quanto riguarda il motivo per cui le versioni successive non supportano i caratteri UTF-8 da 4 byte, penso che una sia per motivi di retrocompatibilità, e l'altra è che i caratteri al di fuori del piano multilingue base sono raramente usati.

Per salvare caratteri UTF-8 da 4 byte in Mysql, è necessario il set di caratteri utf8mb4, ma è supportato solo dopo la versione 5.5.3 (vedi versione: select version(); )。 Penso che per una migliore compatibilità dovresti sempre usare utf8mb4 invece di utf8.  Per i dati di tipo CHAR, utf8mb4 occupa più spazio e, secondo la raccomandazione ufficiale di Mysql, usa VARCHAR invece di CHAR.







Precedente:Uso semplice del framework ORM SqlSugar
Prossimo:L'intestazione della richiesta HTTP Expect è spiegata in dettaglio
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com