プロ・クリエータの実践ウェブテクニック集



文字コードの指定 SET NAME

 MySQLは、4.1から内部処理コードが"utf8"に変わり、文字処理周りにも変更が出ています。 そのために、クライアントから送信される文字コードとデータベースの文字コードが異なる場合、文字化けが発生する可能性があります。 それを防ぐには、クライアントから送信される文字コードやサーバーから返される文字コードを指定する必要があります。

 SET NAME は、クライアントから送信されるSQLステートメントの文字セットを指定します。
SET CHARACTER_SET は、クライアントから送信されるSQLステートメントの文字セットと、サーバーからクライアントに返される文字セットを指定します。

*注 SET NAME による文字セットの指定は、SQL 文使用に起因する脆弱性が報告されており、 php5.2.3 から新たに追加された APIレベルの "mysql_set_charset()" が推奨されます。 (例) mysql_set_charset('utf8');

SET NAME

<?php # UTF8 mysql_connect('localhost', 'username', 'passwd') || die(); mysql_query('SET NAMES utf8'); ?> <?php # EUC-JP mysql_connect('localhost', 'username', 'passwd') || die(); mysql_query('SET NAMES ujis'); ?>

SET CHARACTER_SET

<?php # UTF-8 mysql_connect('localhost', 'username', 'passwd') || die(); mysql_query('SET CHARACTER_SET utf8'); ?>

オプションファイルでの設定

[mysql] default-character-set-name = utf8