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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top