Onkel Hans: Charset Angabe bei PDO Verbindung zur Datenbank

Hallo!

Meine PHP-Skripte greifen via PDO auf meine SQL Datenbanken zu. Bei meinen Datenbank-Tabellen stelle ich bei Kollation immer „utf8mb4_unicode_ci“ ein. Auch jede Datenbank selbst ist auf „utf8mb4_unicode_ci“ eingestellt.

Nun ist mir gerade aufgefallen, dass ich bei der PDO-Verbindung als Charset immer nur „utf8mb4“ angebe und nicht „utf8mb4_unicode_ci“:

$dsn = "mysql:host=$host; dbname=$db; charset=utf8mb4"

Ich hatte noch nie irgendein Problem mit Charsets, falschen Zeichen oder irgendwas in diese Richtung. Aber nachdem ich kein Experte bin, möchte gerne wissen und sicherstellen, ob das eh OK ist so … oder soll ich dann bei der PDO Verbindung als Charsetangabe auch unbedingt „utf8mb4_unicode_ci“ mit auf den Weg geben?

Oder anders gefragt: Wenn die Angabe von „utf8mb4“ reicht, wieso muss man dann nicht explizit die unicode_ci Variante angaben?

Wie gesagt, ich habe kein Problem, ich möchte mich nur fortbilden und besser verstehen, was ich tue.

Danke im Voraus!

Onkel Hans

  1. Hi,

    Meine PHP-Skripte greifen via PDO auf meine SQL Datenbanken zu. Bei meinen Datenbank-Tabellen stelle ich bei Kollation immer „utf8mb4_unicode_ci“ ein. Auch jede Datenbank selbst ist auf „utf8mb4_unicode_ci“ eingestellt.

    Nun ist mir gerade aufgefallen, dass ich bei der PDO-Verbindung als Charset immer nur „utf8mb4“ angebe und nicht „utf8mb4_unicode_ci“:

    Eine Kollation legt mehr fest als nur die Kodierung, da steckt z.B. drin, ob beim Sortieren ein ä wie ein ae behandelt werden soll oder das ä nach z kommen soll usw.

    Für die Verbindung ist die Sortierreihenfolge usw. wurscht, da geht es ja nur drum, die Zeichen ohne Verluste zu übertragen.

    Darum reicht bei der Verbindung die Kodierung, bei den Spalten/Tabellen braucht's die Kollation.

    (so ist zumindest mein Verständnis der Sache)

    cu,
    Andreas a/k/a MudGuard

    1. Herzlichen Dank! Dann lasse ich es, wie es ist! 😀