• 締切済み

MySQLでの文字化けについて

すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数19

みんなの回答

  • 662bpm
  • ベストアンサー率50% (1/2)
回答No.4

参考URLにありますが、もしCSVの読み込みにfgetcsvを利用している場合は、変な文字化けをしてしまう可能性が高いです。 条件的には、参考URLと似ている気がするので、もしかしたら参考URLの対処でいけるのではないかと思います。

参考URL:
http://blog.plastik.jp/archives/6
  • ttschool
  • ベストアンサー率28% (18/64)
回答No.3

MySQLの設定は、変えていますか? 変えていないなら、文字化けが出て当然です。

  • twin_shu
  • ベストアンサー率100% (10/10)
回答No.2

すいません。休日は出かけてて反応が遅れました(^-^; PHPソースをwindowsで普通に記述してるとなると、おそらくS-JISでしょう。 となると、PHPがS-JISでDBがUTF-8となって、言語が合ってないのが原因の可能性も考えられます。 場合にもよりますが、基本的にはPHPの文字コードとDBの文字コードは、同じものにするべきです。 なので、PHPのソースが何の文字コードなのか、秀丸等で調べてみてください。

sh0707
質問者

補足

アドバイスありがとうございました。 秀丸でエンコードをUTF-8に変更して アップ後、実行したのですが、同じでした。 日本語を使用しない場合は普通に動作はしている ようなのですが。 (EUC-JPでは問題なく動作 していたソースなんですけど・・) もうすこし調べてみます。

  • twin_shu
  • ベストアンサー率100% (10/10)
回答No.1

それを見る限りでは合ってる気がしますが・・・ 一応確認しますが、 ・CSVファイルの文字コードは何になっていますか? ・MySQLの文字セットは「utf8_general_ci」? ・PHPソースはUTF-8で記述していますか? この辺の情報をお願いします。

sh0707
質問者

補足

・CSVファイルの文字コードは何になっていますか? >SJISです。 ・MySQLの文字セットは「utf8_general_ci」? >なってます ・PHPソースはUTF-8で記述していますか? >すいません、PHP詳しくないので よくわかりません。 windowsでソースは記述してます。

関連するQ&A

  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • MySQL文字コード

    DB情報をHTMLで表示する場合に、mb_convert_encoding()で指定する文字コード MySQL5.1 PHP5 HTML - shift_jis MySQL の文字セット UTF-8 Unicode (utf8) MySQL の接続照合順序: ujis_japanese_ci フィールドの照合順序 ujis_japanese_ci PHPプログラムでDB情報取得後にSJISに変換 mb_convert_encoding($String, "SJIS", "●●●"); ●●●の文字コードを何を指定すればいいのかがわかりません。 EUCを書くとうまくいってるような気もしますが、なぜEUCでうまくいく のかもわかりません。 ご教授下さい。

    • 締切済み
    • PHP
  • mysql登録時の文字化け

    PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか? ちなみに、現在の文字コードは HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> PHP開始時に mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci ファイルの保存形式はutf-8(BOMなし) SQL文のデータ部分にmb_convert_encodingを使用 例: insert into test(test1,test2) values( mb_convert_encoding("テスト1","EUC-JP","UTF-8"), mb_convert_encoding("テスト2","EUC-JP","UTF-8")) よろしくお願いします

    • ベストアンサー
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • mysql文字化けについて

    どうしても自己解決できません。宜しくお願いします。 sqliteで色々できるようになり、いざmysqlに移行と思いデータを mysqlに移そうとしています。ところが日本語がデータベース内で文字化けしています。 sqliteでは文字コードを変えると大丈夫だったのですが。 $simei=mb_convert_encoding($_POST[simei],"EUC-JP","SJIS"); musqlには「照合順序」というのがあり、よく意味が分からないのですがこれが文字コードを設定するところと思い、そこで「ujis_japanese_ci」と言うのに設定してみたり、sjisにしてみたり色々試したのですがやはりデータベース内では文字化けしています。 どのようにすればデータベース内に保存された日本語文字が文字化けしないで保存されるのでしょうか。宜しくご指導お願いいたします。

    • ベストアンサー
    • PHP
  • MySQL文字化け対応

     こんにちは。 1つ教えて頂けないでしょうか。 XAMPP1.8.2をダウンロードしてphpMyAdminを使用し1つテーブルを作成しました。 列のデータ型は4列全てvarchar(255)です。そこにCSVのUTF-8+CRLFで保存したデータを インポートすると日本語の項目列(4列目)が文字化けしてしまいます。また1行目の1列目の 項目に不要な文字化けした文字が付いてしまっています。 php.iniの変更 mbstring.internal_encoding = UTF-8 mbstring.http_output = UTF-8 mbstring.encoding_translation = On mysql\binのmy.iniの変更 init-connect=\'SET NAMES utf8\' collation_server=utf8_unicode_ci character_set_server=utf8 テーブルの照合順序をutf8_general_ciに変更 以上の変更を行っても文字化けしてしまいます。 まだ他に変更しなければならないところがあるのでしょうか? 分かる方おられましたら、教えて頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • (mysql_set_charset)PHPでINSERTした時の文字

    (mysql_set_charset)PHPでINSERTした時の文字化け 現在、独学でPHPを弄っているのですが 文字化けが起こってしまい色々調べたのですが理解できていないのでこちらで質問させていただきます。 海外・日本向けのホームページを作成中で 日本向けのHTMLについては、 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> 海外向けのHTMLについては、 <meta http-equiv="content-type" content="text/html; charset=utf-8"> と、設定。 データベースの設定は(全てを理解していないのでコピー) MySQL:MySQL の文字セット: UTF-8 Unicode (utf8) MySQL 接続の照合順序:utf8_general_ci 各テーブル照合順序:utf8_general_ci 各カラムは数値の部分のみ)int、文字列についてはvarchar、utf8_general_ciです。 PHPのver:5.2.14 (レンタルサーバーはsakuraインターネットです。) そこで日本向けのHPからINSERTを行ったところ、 DB内を見ると文字が入っていない状態だったり、文字化け(イ.イイイ(適当))な感じになり 非常に苦戦しております。 私的思考では 『utf8のDBにutf8以外の文字コード(shift_jisやらeuc等)で書き込むから文字化けするのであって 書き込む時にutf8に変換してやれば良い。』と思っております。 (この時点で解釈が間違っているのであれば遠慮無くご指摘頂ければ幸いです。) そこで色々調べてみたのですが mysql_set_charset()関数を記述すると良いとの記事がありました。 ですがこの関数について解釈がままならず・・・(涙 例えばこの関数は $link = my_mysql_connect($host, $user, $passwd) $tmp = mysql_set_charset('sjis', $link); utf8で書き込みをしたutf8の文字コード(データ)をsjisとして表示してくれる訳でしょうか? 簡単に言えば <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">と同様の意味でしょうか? また、PHPからINSERTする時の変換についてはINSERT前に mb_convert_encoding() で変換しなければならないのでしょうか? また、表示もそうですが 海外向け・日本語向けのHPを作成する際はDBを分割するべきなのでしょうか? イタリア語やフランス語については「e」の頭に「`」の様な特殊文字がありますし・・・。 乱文で失礼致しました。 どなたかご教授頂ければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • さくらサーバでの文字化け

    以前にも質問をさせていただいたのですが解決しなかったので再度投稿させていただきます。 下記環境にて携帯サイトを作成しております。 さくらレンタルサーバ(スタンダードプラン) MySQL 5.1(2010-12-15時点で最新のもの) PHPコード UTF-8 ver.5.2.14 テンプレートコード UTF-8 smarty使用 $hoge = mb_convert_encoding( $hoge, 'SJIS-win', 'UTF-8' ); $smarty->assign ( 'contents', $hoge ); 上記のような感じでsmartyにアサインする変数をUTF-8からSJIS-winに変換して表示するようにしています。 テンプレート表示周りは問題ないのですが、DBからSELECTしたデータや、新たにINSERTするデータが"??"という感じで文字化けを起こしてしまいます。 なお、INSERTにつきましては、フォームから受け取るデータを $query = mb_convert_encoding( $_GET[$value], 'UTF-8', 'SJIS-win' ); といった感じでUTF-8に戻しております。 また、PDOを使用しておりますので、SET NAME(セキュリティ上NGなようなのでそもそも使用したくない)、mysql_set_charset()を入れる場所がわからず。。 ちなみにteratermから見たDBのコードが… Server characterset: ujis Db characterset: utf8 Client characterset: ujis Conn. characterset: ujis となっています。 \C utf8と打ち、Server charcterset以外はutf8にできるのですが、一度terminalを切りまた確認するとujisに戻ってしまいます。。 ※phpMyAdminで見ると照合順序:utf8_general_ci、MySQLの文字セット:UTF-8 Unicode(utf8)と表示されております。 諸々調べたのですが、現状上記環境を使用している以上、UTF-8での作成は不可能なのでしょうか? ご教示いただけますよう何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 文字化けしてしまいます。

    ~の文字が文字化けして、どうしても解決ができません。 どなたかお分かりになる方、アドバイスをよろしくお願いいたします。 PHP5、Xampp、XP の開発環境になります。 実は出勤時間をPCからと携帯からの両方で管理しようと思っています。 データ保存用ファイルは、utf-8のtxtファイルになります。 すべてをutf-8のファイルで作ることができれば、問題は起きてこないわけですが、携帯が かかわってきており、sjisを使わざるを得ません。かといって、すべてのファイルをSJISにするのも これまた、ダメ文字の関係でそれもできません。 そこで、携帯だけはsjisファイルで作っています。このsjisファイルとutf-8ファイルの間で文字化けが おきてしまいます。 出勤時間を読み込んで、10:00~のようにutfの保存用ファイルから読み込んで、mb_convert_encoding でsjisに変換して表示をします。これは、普通に表示になります。 表示されたファイルは携帯のsjisファイルですので、携帯から出勤時間を変更して保存しようとする 場合、今度はsjisからutf-8に変更して保存する必要があります。 そこで、携帯からutf-8の保存用ファイルに更新した内容を保存する場合にmb_convert_encodingを かけて、utf-8に変換しました。一応、mb_detect_encodingを使ってutf-8に変更されていることも 確かめました。 しかし、保存さているデータは、10:00縲 というように~が縲に文字化けしてしまいます。 この文字化けを回避する方法がお分かりの方、ぜひお知恵をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SJIS→EUCに送っても文字化けしない

    htmlは、SJISで作っています。 PHPは、EUCで作っています。 普通は文字化けをするため、mb_convert_encoding関数を用いますが、 なぜか、この関数を使わなくても、文字化けしません。 友人は、有り得ないと言います。 事実、友人PCではmb_convert_encoding関数で文字化けを直してました。 私も友人に同感で、SJIS→SJISやEUC→EUCなら文字化けしないけど、文字コードが違うのです。違うから、mb_convert_encoding関数を使うと、思っているのですが‥‥ 設定が違うのかと思い、友人の、php.iniなどいくつかのファイルを私のPCに上書きしてもらいましたが、変わりませんでした。 こういうことってあるのでしょうか? 文字化けしないなら、mb_convert_encoding関数を使わなくて良いので、楽だと思いましたが・・・ 何かの不具合なら、いざ完成した時、またmb_convert_encoding関数をいれる手間がありますし、どうしようか迷っています。 本には、「文字化けしない場合もある」という記述は一言も書いてありませんでした。 逆に、「文字化けするからmb_convert_encoding関数を用いる」と大きく書いてあるぐらいです。 何かの設定なのでしょうか? ソフトのバージョンも、同じでした。不思議です。

    • ベストアンサー
    • PHP

専門家に質問してみよう