Mysql
 sql >> Database >  >> RDS >> Mysql

Usando utf8mb4 con php e mysql

utf8 di MySQL la codifica non UTF-8 attuale. È una codifica simile a UTF-8, ma supporta solo un sottoinsieme di ciò che supporta UTF-8. utf8mb4 è effettivo UTF-8. Questa differenza è un dettaglio di implementazione interna di MySQL. Entrambi sembrano UTF-8 sul lato PHP. Se usi utf8 o utf8mb4 , PHP otterrà UTF-8 valido in entrambi i casi.

Quello che devi assicurarti è che la codifica della connessione tra PHP e MySQL è impostato su utf8mb4 . Se è impostato su utf8 , MySQL non supporterà tutti i caratteri. Hai impostato questa codifica della connessione usando mysql_set_charset() , il charset della DOP Parametro di connessione DSN o qualsiasi altro metodo appropriato per l'API del database di tua scelta.

mb_internal_encoding imposta semplicemente il valore predefinito per $encoding parametro all mb_* funzioni hanno. Non ha nulla a che fare con MySQL.

UTF-8 e UTF-32 differiscono nel modo in cui codificano i caratteri. UTF-8 utilizza un minimo di 1 byte per carattere e massimo 4. UTF-32 sempre utilizza 4 byte per ogni carattere. UTF-16 utilizza un minimo di 2 byte e un massimo di 4.
A causa della sua lunghezza variabile, UTF-8 ha un po' di sovraccarico. Un carattere che può essere codificato in 2 byte in UTF-16 può richiedere 3 o 4 in UTF-8; d'altra parte, UTF-16 non usa mai meno di 2 byte. Se stai archiviando molto testo asiatico, UTF-16 potrebbe utilizzare meno spazio di archiviazione. Se la maggior parte del testo è inglese/ASCII, UTF-8 utilizza meno spazio di archiviazione. UTF-32 utilizza sempre più spazio di archiviazione.