Rolf B: mySQL: Fehler mit COLLATE

Beitrag lesen

Hallo Linuchs,

so, Recherche beendet.

https://mariadb.com/kb/en/supported-character-sets-and-collations/

Nicht jede Collation passt zu jedem Charset. Die Collation utf8_bin gehört zum Charset utf8, wie die verlinkte Quelle zeigt, und für das Charset utf8mb4 brauchst Du die Collation utf8mb4_bin.

Offenbar stellt phpMyAdmin die DB-Verbindung mit einem anderen Charset her als dein Programm, das kann man bei Verbindungsaufname festlegen. In PDO mit einer charset-Angabe im Connection String, in mysqli mit der set_charset Methode auf dem mysqli Objekt.

Wenn Du nichts angibst, dann ist utf8 oder eine Einstellung an der Datenbank wohl der Default.

Der Unterschied zwischen utf8 und utf8mb4 ist die maximale Länge einer Codesequenz für ein Zeichen. Bei utf8 ist es 3, bei utf8mb4 ist es 4. Die Folge ist, dass man mit utf8 nur die Basis-Ebene des Unicode darstellen kann (65536 Zeichen) und mit utf8mb4 bis zu 2,1 Millionen Zeichen.

Ich nehme an, dass diese Restriktion bei utf8 aus der Zeit vor Unicode 3.1 stammt (bis Unicode 3.0 reichte das. Unicode 3.1 ist von 2001 und MySQL von 1995) und man damit Speicher sparen wollte. utf8mb4 wurde später eingeführt, um der lieben Kompatibilität wegen mit einem neuen Namen.

Rolf

--
sumpsi - posui - obstruxi