MySQL Emojis werden zum Fragezeichen?


04.08.2022, 14:48

Aber es sollte auch trotzdem alle Deutschen (äöüß...) und Englischen Zeichen Unterstützen.

Sollte jetzt nicht nur für Emojis sein.

3 Antworten

Und wie genau lautet der SQL Befehl dafür um die Datenbank oder Tabelle umzustellen ?

Am einfachsten ist es, du änderst das Feld in das die Emojis gespeichert werden sollen zum Typ blob.

Ansonsten

ALTER DATABASE `datenbankname` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE `tabellenname` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `tabellenname` MODIFY `feldname` TEXT CHARSET utf8mb4;

Und die Verbindung die du zur Datenbank aufbaust muss natürlich auch utf8mb4 sein.

Alex

ladladsd 
Fragesteller
 04.08.2022, 15:01
Und die Verbindung die du zur Datenbank aufbaust muss natürlich auch utf8mb4 sein.

Daran liegt es wohl und nicht an der Datenbank,

Wenn ich per Hand in phpMyAdmin ein Emoji einfüge dann wird es richtig dargestellt.

Aber was genau müsste ich dafür ändern wenn ich das mit PDO mache ?

<?php
$server = 'localhost';
$user = 'root';
$psw = "";
$dbName = 'database_name';

try {
    $conn = new PDO('mysql:host=' . $server . ';dbname=' . $dbName . ';charset=utf8', $user, $psw);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $sql = "SELECT * FROM table_name";
...

Mit mysqli war hatte das standardmäßig schon funktioniert glaube ich.

0
EinAlexander  04.08.2022, 15:09
@ladladsd
Aber was genau müsste ich dafür ändern wenn ich das mit PDO mache ?
new PDO('mysql:host=' . $server . ';dbname=' . $dbName . ';charset=utf8mb4', $user, $psw);

Mit mysqli war hatte das standardmäßig schon funktioniert glaube ich.

mysqli_set_charset($dbname, "utf8mb4");
1

MySQL an sich kann natürlich Unicode, ich würde auch erwarten dass das auf zivilisierten Betriebssystemen wie Linux als Default verwendet wird. Sonst musst du es explizit beim Anlegen der Datenbank bzw. Tabelle setzen:

https://dev.mysql.com/doc/refman/8.0/en/charset-syntax.html

Du musst aber auch darauf achten dass die gesamte Kette - von Eingabe über Verbindung zur Datenbank und Speicherung in Tabellen bis zur Ausgabe - Unicode verwendet.

Gerade auf Windows (wo man ja teilweise immer noch mit irgendwelchen antiken Codepages herumfuhrwerkt) kann das ausdrückliche Konfiguration erfordern.

die beste möglichkeit wäre utf8mb4 als zeichensatz zu nehmen . kommt aber immer auf das anzeigegerät an ob es dann wieder richtig dargestellt wird . den wenn dein client das nicht in emoji verwandelt bleiben das halt zeichen die nicht dargestellt werden können . das heisst aber nur das es an der darstellung hinkt, der zeichencode ist dennoch richtig .

https://www.etutorialspoint.com/index.php/189-how-to-store-emoji-character-in-mysql-using-php