utf8
von MySQL Codierung ist nicht tatsächlich UTF-8. Es ist eine Codierung, die UTF-8 ähnelt, aber nur eine Teilmenge dessen unterstützt, was UTF-8 unterstützt. utf8mb4
ist tatsächlich UTF-8. Dieser Unterschied ist ein internes Implementierungsdetail von MySQL. Beide sehen auf der PHP-Seite wie UTF-8 aus. Ob Sie utf8
verwenden oder utf8mb4
, erhält PHP in beiden Fällen gültiges UTF-8.
Sie müssen sicherstellen, dass die Verbindungscodierung zwischen PHP und MySQL ist auf utf8mb4
gesetzt . Wenn es auf utf8
eingestellt ist , unterstützt MySQL nicht alle Zeichen. Sie legen diese Verbindungscodierung mit mysql_set_charset()
fest , das PDO charset
DSN-Verbindungsparameter oder eine andere Methode, die für Ihre Datenbank-API Ihrer Wahl geeignet ist.
mb_internal_encoding
setzt einfach den Standardwert für die $encoding
Parameter alle mb_*
Funktionen haben. Es hat nichts mit MySQL zu tun.
UTF-8 und UTF-32 unterscheiden sich darin, wie sie Zeichen codieren. UTF-8 verwendet ein Minimum 1 Byte für ein Zeichen und maximal 4. UTF-32 immer verwendet 4 Bytes für jedes Zeichen. UTF-16 verwendet mindestens 2 und höchstens 4 Bytes.
Aufgrund seiner variablen Länge hat UTF-8 ein wenig Overhead. Ein Zeichen, das in UTF-16 in 2 Bytes codiert werden kann, kann in UTF-8 3 oder 4 annehmen; andererseits verwendet UTF-16 niemals less als 2 Byte. Wenn Sie viel asiatischen Text speichern, benötigt UTF-16 möglicherweise weniger Speicherplatz. Wenn der Großteil Ihres Textes Englisch/ASCII ist, verbraucht UTF-8 weniger Speicherplatz. UTF-32 verwendet immer den meisten Speicherplatz.