• 締切済み

MySQLの文字コードについて

こんばんは。今、PHP+MySQLの勉強をしているのですが、PHPとMySQLをSJISで保存して接続をすると文字化けはしないのですが、他の文字コードだと一部文字化けをしてしまいます。 どうやったら、他の文字コードでも化けないようにすればよろしいのでしょうか?ちなみにPHPは5.2/Apache2.0/MySQLは5.0を使っておりmy.iniの文字コード設定はデフォルトでSJISにしています。 よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

SET NAMES でうまくいきませんでしたか。 自分ではmysql5.0がうまく動作させられてないので、推測ですけど、 phpのmysql_xxx 関数は4.0までの機能にしか対応していないようなので、mysqli_xxx の拡張版を使った方がよいかもしれません。 その上で以下の関数を実行してみる方法も、前回記載したサイトにありました。 mysqli_options ( mysqli link, MYSQLI_READ_DEFAULT_FILE, 'mysql5用のmy.cnfのパス' )

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

>PHPは5.2/Apache2.0/MySQLは5.0 それで、OSは? SJISを利用するというところから、windowsかと推測しますけど、 windows用PHPにdefaultで入っている、libmysql.dll は、文字コード設定が、laten1 なので、 「サーバーに接続した後にすぐ、"SET NAMES キャラクターセット名" という SQL 文を実行する」という対策が必要です。「」内は以下の参考ページから引用。 MySQL5.0では、多バイト文字の扱いで結構不都合があるようなので以下のページを参考にして下さい。 http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40

参考URL:
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40
gonzou123
質問者

補足

ご回答ありがとうございます。 OSはXPになります。接続をした後にmysql_query(set names ujis);でデータベースの文字コード変換をしていますが、やはりテーブル内のデータは一部文字化けを起こしてしまいます。

関連するQ&A

  • PHPとMYSQLの文字コードについておねがいします。

    Apache2、PHP5、MYSQL5.0を使用しています。 当方、PHPの初心者講座などを見てUTF-8で作っていこうと思い設定をしたものの、上手くいかず質問させていただきました。 PHPからQuery文(日本語)を送ってMYSQLのテーブルにINSERTしたのですが、文字化けしてしまいます。 my.iniのdefault-character-set=部分をutf8からsjisやujisなどに変えてやってみたのですが、文字化けの種類(?)が変ってしまうだけでやはり文字化けしてしまいました。 ALTER DATABASE AAA CHARCTER SET utf8をやっても変らず文字化けしてしまい、show variables like 'char%'でCharcterを調べたところ、下記のようになっていました。 charcter_set_client | utf8 charcter_set_connection| utf8 charcter_set_database | utf8 charcter_set_filesystem| binary charcter_set_results | utf8 charcter_set_server | utf8 charcter_set_system | utf8 MYSQLとPHPの文字に関係あるようなところをコピーしました。 どこかおかしなところがあるでしょうか。 ------my.ini----- [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 ----------------- ------php.ini----- output_buffering = Off extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On ------------------ どなたか解決策を知らないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • phpMyadminでのMySQLの文字セット

    windows2000 pro Apache2.0.55 phpmyadmin 2.8.03 mySQL 5.0.20 上記環境にてphpmyadminでmySQL上にテーブルを作成しようとしているのですが日本語のテーブル名を作成するとエラー(文字化け)になってしまいます。 基本的に現状すべてSJISに設定しているのですが (漏れがあるかもしれませんが)phpmyadminの画面上に表示されるmySQLの文字セットが "UTF-8 Unicode (utf8)"になっているのが原因かと推測しているのですが思いつく箇所をすべてSJISにしているつもりなのですが一向に変わりません。 ・php.ini ------------------------------------ mbstring.internal_encoding = SJIS mbstring.http_output = SJIS ------------------------------------ ・my.ini ------------------------------------ [mysql] default-character-set=sjis [mysqld] default-character-set=sjis ------------------------------------ ・config.inc.php ------------------------------------ $cfg['DefaultLang'] = 'ja-sjis'; $cfg['DefaultConnectionCollation'] = 'sjis_japanese_ci'; $cfg['DefaultCharset'] = 'ja-sjis'; ------------------------------------ 各関連しそうな箇所は上記のように設定しているのですがお気づきな点及び解決方法がありましたらお教え下さい。 同環境にて管理しやすくするためテーブル名、フィールド名を日本語にしたいのが目的です。

    • ベストアンサー
    • MySQL
  • データベースごとに文字コードを変えたい。デフォルトの文字コード

    MySQLサーバーで、すでに1つ別の目的のデータベースが 存在します。 デフォルトのデータベースは、my.iniでsjisに設定 されています。 このMySQLサーバーに別の文字コードでデータベースを 追加したいのですが、そのようにすればよいでしょうか?

    • ベストアンサー
    • MySQL
  • 文字化け回避できません

    MYSQL入門以前という本を購入し、MYSQLとPHPの勉強をしています。例題である住所録をPHPを使って作成しました。フォームから氏名等登録すると、登録された内容がブラウザへ表示される形になっています。ブラウザには文字化けも無く日本語がきちんと表示されているのですが、ターミナル、PHPMyadminでテーブルの内容を見てみると文字化けしています。 apache 1.3.3 MYSQL 4.0.26 PHP 4.4.1 Mac OS X 10.4.8 my.cnfの内容 [mysqld] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis php.iniのdefault_charset部分 default_charset="Shift_JIS" ターミナル→ウィンドウ設定→ディスプレイ部分 文字セットエンコーディングUTF-8 PHPMyAdmin 言語 UTF-8 文字化けを回避するにはどれをどうすればいいのか素人なので全然わかりません。教えてください。

    • 締切済み
    • PHP
  • MySQLの文字化け

    Win XP MySQL4.0.13 TOMCAT4.1 APACHE2 以上を使用して自宅にて開発を行っております。 HTMLページより入力されたデータをjspファイルへ渡し、jspファイル内へ記述されたSQL文によりデータベースへの書き込みを試みております。 データベースへの書き込み自体はできるのですが、文字化けで困っています。 書き込み後、プロンプトよりselect文で確認すると、日本語のみ文字化けし、アルファベットは大文字が小文字にところどころなってしまいます。数字は問題ありませんでした。 具体的には「あいうえお」が「BDFHJ」に文字化けしていました。 MySQLのコンソールのMY.ini Setuoタブに [mysqld] default-character-set=sjis [mysql] default-character-set=sjis と指定しており、HTML,jspファイル内でもshift-jisを指定しております。 ご教授よろしくお願いしたします。

    • ベストアンサー
    • MySQL
  • FedoraCore4+php5.0.4+Mysql4.1.11で文字化け

    過去のログを見たのですがばしっとした答えがみつからないので質問します。 旧マシンでfedoracore3+php4.3.11+mysql3.23.58を使っていたました。 新しいマシンにはFedoraCore4+php5.0.4+Mysql4.1.11にしました。 Fedora4にしたのはマシンのドライバの関係です。 旧マシンでのphp+Mysqlのwebシステムをそのまま新マシンに移行したのですがphpのwebページ上で文字化けというか[???]と表示されてしまいます。 mysqlとphpをどうしてもsjisで動かしたいのですが、 どうもいい対策がみつかりません。 ソースではなくrpmから展開していますのでオプション指定もできません。 sjisにしたい理由として ・携帯サイト作りはsjisなので今後もsjisでしたほうがなにかと便利だということ ・旧マシンはsjisでつくっている わたしがおこなったことは php.iniに default_charset =sjis mb関連をsjisに変更 my.cnfは [mysqld] default-character-set = sjis [client] default-character-set = sjis [mysql] default-character-set = sjis としています。 どなたかご教授おねがいします。

    • ベストアンサー
    • MySQL
  • MYSQLから抽出したクエリの結果が文字化けします。

    PHPの文字化けの件でお伺いしたいのですが サーバーOS:FreeBSD PHP4.3.11とMYSQL4. 1. 11を利用してWEBアプリを作成しよう としております。 文字化け対策として、my.confに以下の文を追加しました。 [client] default-character-set= sjis [mysqld] default-character-set= sjis character-set-server = sjis [mysqldump] default-character-set= sjis [mysql] default-character-set= sjis mysql再起動後、telnetにて、データベースの内容を 確認したところShiftJISの文字コードでで無事に確認できました。 そこでPHPからこのデータを抽出しようと考え select * from table where column=12345 のような形で日本語のデータをPHPで表示させようとしましたが 日本語のデータのところが????と表示されてしまいうまく表示させることが 出来ません。ここでhttpd.conf に AddCharset SJIS .sjis と追加してしても症状が改善されません。 php.iniを編集すればうまくいくのかと考え、php.iniを確認したところ [mbstring] ;mbstring.internal_encoding = EUC-JP ;mbstring.http_input = auto ;mbstring.http_output = SJIS ;mbstring.detect_order = auto ;mbstring.substitute_character = none; PHPとMYSQLと双方に原因が考えられますが、telnet上ではきれいに 表示されることを考えPHPの項目にてお伺いいたしました。 となっておりました。他に何か原因やチェックしなければいけないところ 等ございましたらご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

    こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。 現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。 現状の日本語に関する設定は下記のようになっております。 ▼MySQL(my.cnf) バージョン:4.1.20 [mysqld] default-character-set=sjis init_connect="SET NAMES sjis" [mysql.server] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ▼PHP(php.ini) バージョン:4.3.9 mbstring.internal_encoding = SJIS mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto PHP内でMySQLと接続した直後に次のようにSJISを指定しています。 $sql="SET NAMES sjis"; mysql_query($sql); ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。 上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか? 1.PHPファイルをEUCコードに変換。 2.php.iniのSJISの部分をEUCに変換。 3.MySQLの設定ファイルのsjisの部分をujisに変換。 4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。 特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。 もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

    • ベストアンサー
    • PHP
  • MySQLから送られて来たデータの文字化け

    いつもお世話になっています。 今回、phpでmysqlに接続したのですが、mysqlから引っ張ってきたデータが文字化けして困っています。(日本語のみ文字化け) 使っている環境は以下の通りです。 IIS6.0 PHP 5.0.4 MySQL 4.1.22 IISは、CGI、ASP、ISAPIを許可にしています。(.phpを見れるようになっています。) php.iniのmbstringの設定は以下のようになっています。 1105 mbstring.language=Japanes 1110 mbstring.internal_encoding = EUC-JP 1113 mbstring.http_input = auto 1117 mbstring.http_output = SJIS 1124 mbstring.encofing__translation = On 1128 mbstring.detect_order = auto 1132 mbstring.substitute_charecter = auto 1133 mbstring.script_encoding = EUC-JP my.iniの設定は以下のようになっています。 [mysql] default-character-set=sjis [mysqld] default-character-set=sjis skip-character-set-client-handshake mysqlでコマンドで確認したところ以下のような文字設定になっています。 mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ character_set_systemがutf-8になっているのが気がかりですが、 こんな感じで設定しています。 mysql内では文字化けしていないのに、 phpで呼び出した時に文字化けするのでしょうか? どなたかご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQL5.0の文字コードが変更できずに困っています。

    MySQL5.0の文字コードが変更できずに困っています。 環境は全てWindowsXPのローカルで動かしています。 インストール直後、statusコマンドで確認したところ、 Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 となっていました。 次に、C:\Program Files\MySQL\MySQL Server 5.0内のmy.iniを [client] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis [mysqld] default-character-set=sjis としてMySQLを再起動してみたのですが、 Server characterset: latin1 Db characterset: latin1 Client characterset: sjis Conn. characterset: sjis で、ServerとDbが変わらず、このままではINSERT文などで日本語をいれることが出来ません。 どなたかご教示お願いします。

    • ベストアンサー
    • MySQL