Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist PDO ... SET NAMES utf8 gefährlich?

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.