MySQLのutf8
エンコーディングはではありません 実際のUTF-8。これはUTF-8に似たエンコーディングですが、UTF-8がサポートするもののサブセットのみをサポートします。 utf8mb4
実際 UTF-8。この違いは、内部実装の詳細です。 MySQLの。どちらもPHP側ではUTF-8のように見えます。 utf8
を使用するかどうか またはutf8mb4
、PHPはどちらの場合も有効なUTF-8を取得します。
確認する必要があるのは、接続エンコーディング PHPとMySQLの間はutf8mb4
に設定されています 。 utf8
に設定されている場合 、MySQLはすべての文字をサポートするわけではありません。この接続エンコーディングは、mysql_set_charset()
を使用して設定します 、PDOcharset
DSN接続パラメータまたは選択したデータベースAPIに適したその他の方法。
mb_internal_encoding
$encoding
のデフォルト値を設定するだけです パラメータすべてmb_*
関数が持っています。 MySQLとは何の関係もありません。
UTF-8とUTF-32は、文字のエンコード方法が異なります。 UTF-8は最小を使用します 1文字あたり1バイト、最大4バイト。UTF-32常に すべての文字に4バイトを使用します。 UTF-16は最小2バイト、最大4バイトを使用します。
可変長のため、UTF-8には少しオーバーヘッドがあります。 UTF-16で2バイトにエンコードできる文字は、UTF-8では3または4を取ることができます。一方、UTF-16はlessを使用しません。 2バイトより。アジアのテキストを大量に保存している場合、UTF-16はより少ないストレージを使用する可能性があります。テキストのほとんどが英語/ASCIIの場合、UTF-8はより少ないストレージを使用します。 UTF-32は常に最も多くのストレージを使用します。