2012-05-18

照合順序が latin1_swedish_ci なら おれも latin1


PHPが記述されたファイルのエンコード:EUC-JP (CP51932)

MySQLのフィールドの照合順序:latin1_swedish_ci

<?
header("Content-Type: text/html; charset=EUC-JP");

$link = mysql_connect("localhost", "hoge", "hoge");

mysql_select_db("hoge", $link);

mysql_set_charset("latin1", $link);

mysql_query("INSERT INTO `tbl` (`value`) VALUES ('あ')", $link);

$query = mysql_query("SELECT `value` FROM `tbl`", $link);

$row = mysql_fetch_array($query, MYSQL_ASSOC);

echo $row["value"];

mysql_free_result($query);

mysql_close($link);
?>


クライアント側(PHP)が EUC-JP だからといって

mysql_set_charset("ujis", $link);

とすると、MySQLが ujis (EUC-JP) から latin1 へ変換するので文字化けする。


そりゃね、latin1の文字セットに日本語の「あ」なんてないさ。


だから、クライアント側(PHP)も「latin1だよー」って言ってあげると、MySQLは変換しないので文字化けしない。



ということで、このサンプルの出力(echo $row["value"])の結果は





となる。

0 件のコメント:

コメントを投稿

結局は可愛い我が子

以前の会社の話。 俺がいたころ、「当時の社長」の息子が転職してきた。 「あー、結局は同族会社か」 と思ったし、まあ、ほかのヤツもそう思ったよね。 その時は否定した「当時の社長」。 でも、なーんか含みを持たせた逃げの言い訳してたなー。 その器があればとか、 周りが認めてくれればとか...