Devo davvero passare da VARCHAR a VARBINARY per UTF-8 in Mysql & amp; PHP?
-
06-07-2019 - |
Domanda
Devo davvero passare da VARCHAR a VARBINARY e TEXT a BLOB per UTF-8 in Mysql & amp; PHP? Oppure posso attenermi ai campi CHAR / TEXT in MySQL?
Soluzione
Forse. As jason ha sottolineato e non ho notato, MySQL UTF-8 mappa solo il piano multilingue di base. Il manuale sottolinea tuttavia che "Loro [utf8 e ucs2] sono sufficienti per quasi tutti i caratteri nelle principali lingue" Quindi, è probabilmente sicuro ma potresti voler controllare cosa c'è nel piano multilingue di base solo per essere sicuro.
Risposta originale
Finché il database utilizza UTF-8, dovresti essere in grado di utilizzare VARCHAR e TEXT. (Come nota a margine, il manuale MySQL raccomanda usando VARCHAR su CHAR con UTF-8 per risparmiare spazio. In questo caso, dovrebbe essere sicuro usare VARCHAR e TEXT.)
Altri suggerimenti
Non necessariamente. Il supporto UTF-8 di MySQL è limitato a solo 3 byte UTF8, che include tutto fino al Piano multilingue di base . È solo se sono necessari caratteri compresi nell'intervallo di 4 byte che è necessario utilizzare l'archiviazione BLOB; questo è raro, ma non del tutto insolito. Vedi l'articolo di Wikipedia per una descrizione di ciò che ti mancherà e decidi se c'è qualcosa che è necessario.
Ecco un bel link sulla gestione di UTF-8 in PHP. MySQL funziona molto bene con UTF-8 se imposti correttamente le regole di confronto. PHP d'altra parte ha molti problemi.
Naturalmente è sicuro usare VARCHAR per memorizzare il testo UTF-8 e per questo non è necessario VARBINARY.
VARCHAR è un "PERSONAGGIO CON LUNGHEZZA VARIABILE", che si adatterà in modo impeccabile al numero di BYTES necessari per memorizzare i caratteri in base al CHARCODE selezionato.
C'è anche un motivo per cui il supporto UTF-8 di MySQL è limitato a soli 3 byte. Dovresti immergerti nei relativi documenti UTF-8 che parlano della procedura di codifica di UTF-8 per capire perché sia ??corretto.
E, ultimo ma non meno importante: se non sei sicuro di UTF-8, puoi sempre optare per UTF-16. Tuttavia, continuerai a utilizzare VARCHAR in quanto si adatterà perfettamente alla lunghezza dei byte corretta.