Verwenden Sie wirklich noch PHP>=Version 3.6 und <5.3.6 ?
Angenommen, Sie haben 5.3.6 oder höher...
Zeichensätze und PDO_MYSQL DSN sagen, dass Sie verwenden sollten
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Und impliziert (nicht deutlich genug), dass utf8
sollte durch utf8mb4
ersetzt werden ggf.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
ist nicht so gut, war aber die Alternative vor 5.3.6.
Ich denke, "gefährlich" ist ein zu starkes Wort, sogar vor 5.3.6.
Eine verwandte Technik:Verwendung von init_command = SET NAMES ...
in my.cnf
ist schlecht weil init_command
wird beim Verbinden als root
nicht ausgeführt .
utf8mb4
ist der bevorzugte CHARACTER SET
für UTF-8, da es Emoji und einige chinesische Zeichen enthält, die in utf8
fehlten . Dieser Zeichensatz ist ab MySQL-Version 5.5.3 verfügbar.