機種依存文字が化けます。
めっちゃ化けます。とくに、外字的な、ハシゴダカのような文字列を扱えません。PDOまじアレ。
PDOのマニュアルとか検索結果を見ても、ほとんど情報がないんですよね。困りました。
Windowsだと外字に登録するような文字列であっても、UTF-8では扱えるのですが、一部の文字では正しく変換されずにクエスチョンマークになって情報が落ちてしまう。
文字化けといえば、文字化けなのですが、豆腐に近い状態の文字化けなのです。
文字コードを次のようにします。
<?php $pdo = new \PDO( "mysql:host=${host};dbname=${name};charset=utf8mb4", $user, $pass);
または
<?php $pdo = new \PDO( "mysql:host=${host};dbname=${name}", $user, $pass, [\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"] );
wordpressとMySQLの場合、文字コードがutf8mb4になっています。
そのため文字コードを utf8mb4
で指定しなくては、ある種の文字が化けます。
wordpress で 直接SQLを発行する場合
<?php function getPDO (): \PDO { [$host, $name, $user, $pass] = [DB_HOST, DB_NAME, DB_USER, DB_PASSWORD]; $pdo = new \PDO( "mysql:host=${host};dbname=${name};charset=utf8mb4", $user, $pass, [\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"] ); // $pdo->setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION ); // return $pdo; } function getMySQLi(){ $mcli = new \mysqli(DB_HOST,DB_USER, DB_PASSWORD, DB_NAME); $mcli->set_charset('utf8mb4'); return $mcli; }