[centos-users 157] Re: MySQLの文字化け

keijiro icm @ pepota.com
2005年 11月 22日 (火) 00:26:45 JST


keijiroです。
遅レスすみません。

CentOS固有の問題ではなく、MySQLの問題だと解りましたので、
もう、このMLに書くべきではないと思ったのですが、中途半端なので、
経過と結果のみ報告します。
長文で、すみません。


----------


上鍵様、ご返信ありがとうございます。

|   いわゆる機種依存文字は化けると思いますが,関係ないですか? あと
| SET NAMES でできるかどうか分かりませんが「SET NAMES binary」にす
| ると自動変換がなくなるという話もあります.

機種依存文字や「表示」など、
化けやすい文字でのテストはしていませんです。

で、binaryでやると成功しました!
でも、実は、ujisなどは相変わらず不安定な感じだったので、
一旦、全てのmysql絡みのrpmやファイルを削除して、
yumからmysqlとmysql-server、php-mysqlのみをインストールしました。
詳しくは後ほど、、、

|    wget・GET をはじめ telnet コマンドでアクセスして HTTP レスポンス
|  などを念のために確認していますか? 妙な反応を返しているかもしれませ
|  ん.

探ってみたのですが、特におかしなレスポンスはありませんでした。
> HTTP/1.1 206 Partial Content
> Date: Mon, 21 Nov 2005 15:01:21 GMT
> Server: Apache/2.0.52 (CentOS)
> Content-Range: bytes 0-180/181
> Content-Length: 181
> Connection: close
> Content-Type: text/html

----------

さて、あれから色々試したのですが、
上に書いたように、インストールし直したり、
設定を見直したりと、いろいろやってみました。

調べているうちに、CentOSの問題ではなく、MySQL4.1以上のよくある問題で、
そもそもこのMLで質問していること自体おかしいのも解りました。
すみませんm(_ _)m

途中で、終わってしまうのは気持ち悪いので、
経過を書きます。


教えていただいたアドレスや色々調べた情報を元に、
my.cnfをいじりました。

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | ujis                       |
| character_set_connection | ujis                       |
| character_set_database   | ujis                       |
| character_set_results    | ujis                       |
| character_set_server     | ujis                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> CREATE DATABASE `test_ujis` DEFAULT CHARACTER SET ujis;
mysql> INSERT INTO test(text) VALUES ('文字化け');

mysql> select * from test;
+----+-------------------------+
| id | text                    |
+----+-------------------------+
|  1 | 文字化け                |
+----+-------------------------+

と、成功しました!!!

----------

さて、問題のPHPですが、
こちらも成功しました!!!

もちろんですが、
その実行結果は、コマンドやphpMyAdminで見ても正常です。

---

参考までに、
phpのmb関係は次の通りです。
> mbstring.language = Japanese
> mbstring.detect_order = NULL
> mbstring.http_input = EUC-JP
> mbstring.http_output = EUC-JP
> mbstring.internal_encoding = EUC-JP
> mbstring.script_encoding = NULL
> mbstring.substitute_character = NULL
> mbstring.func_overload = "0"
> mbstring.encoding_translation = On

スクリプトは
<?php
$con = mysql_connect("localhost", "user", "passwd");
mysql_select_db("test_ujis");
$sql = "SET NAMES ujis";
mysql_query($sql);
$sql = 'CREATE TABLE `test` ('
. ' `id` INT NOT NULL AUTO_INCREMENT, '
. ' `text` VARCHAR(255) NOT NULL,'
. ' PRIMARY KEY (`id`)'
. ' )'
. ' TYPE = myisam';
mysql_query($sql);
$sql = "INSERT INTO test(text) VALUES ('".mysql_escape_string("文字化け")."')";
mysql_query($sql);
print "sql:".$sql."<br>\n";
$sql = "SELECT * from test";
$result = mysql_query($sql);
if(mysql_num_rows($result) <> 0){
 while($row = mysql_fetch_array($result)){
  $id = $row["id"];
  $data = $row["text"];
  print "data:".$id.":".$data." <br>\n";
 }
}
print "sql:".$sql."<br>\n";
mysql_close($con);
?>

----------

いまから考えると、何で詰まっていたのか解りません。。。
みなさま、ありがとうございました!!


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
keijiro
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/



centos-users メーリングリストの案内