ホーム > 日記 > PDOでSJISだめっぽというので調べてみた

PDOでSJISだめっぽというので調べてみた

だめっぽ。

環境
Windows
PHP 5.2.3
MySQL 5.0.41

my.iniの設定


[mysqld]
default-character-set=CP932
skip-character-set-client-handshake

<?php
   $mysql = mysql_connect('localhost', 'root', '');
   mysql_select_db('test');
   echo mysql_client_encoding(); // latin1
   echo mysql_real_escape_string('ソン'); // ソ\ン
   mysql_close($mysql);

   $mysqli = mysqli_connect('localhost', 'root', '', 'test');
   echo mysqli_client_encoding($mysqli); // latin1
   echo mysqli_real_escape_string($mysqli, 'ソン'); // ソ\ン
   mysqli_set_charset($mysqli, 'cp932');
   echo mysqli_client_encoding($mysqli); // cp932
   echo mysqli_real_escape_string($mysqli, 'ソン'); // ソン
   mysqli_close($mysqli);

   $pdo = new PDO('mysql:dbname=test;host=localhost', 'root', '');
   echo $pdo->quote('ソン'); // 'ソ\ン'
?>

SHOW VARIABLES LIKE “char%”ではclientの文字セットがutf8とでるんですが、クライアントのdll自体がlatin1で動作しちゃってる為使えないです。
mysqliの場合は5.2.3で追加されたmysqli_set_charsetで変更できますが。
PDOに関しては、文字コードナニそれ?って感じでしょう。
プレースフォルダ機能つきプリペアードステートメントが文字コード考慮してなくてどうする。


<?php
   $mysql = mysql_connect('localhost', 'root', '');
   $result = mysql_query('SHOW VARIABLES LIKE "char%"');
   while ($row = mysql_fetch_assoc($result)) {
       echo "|{$row['Variable_name']}\t|{$row['Value']}\t|\n";
   }
   /*
   |character_set_client   |cp932  |
   |character_set_connection       |cp932  |
   |character_set_database     |cp932  |
   |character_set_filesystem       |binary |
   |character_set_results  |cp932  |
   |character_set_server   |cp932  |
   |character_set_system   |utf8   |
   |character_sets_dir     |C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\        |
   */
?>

カテゴリー: 日記 タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。