• ベストアンサー
  • 暇なときにでも

MySQL(UTF-8)で ~ が文字化けしてしまう

いろいろと検索などして探してみたのですが、情報が得られず困っております。お分かりの方おられましたらご教示いただけると幸いです。 環境 Apache 2059 PHP 5.1.6 MySQL 5.0.24a WindowsXP SP2 PHPソース すべてUTF8書いてます。 HTML出力もヘッダーでUTF-8で表示しています。 my.cnfでは すべて default-character-set=utf8 で統一しています。 さらに、PHPからMySQLに接続したときに set names utf8; もしてます。 この環境で、 ~ のみが文字化けしてしまいます。 たとえば、 "あ~あ" とINSERTすると SELECTしてみると "あ?あ" となってしまいます。 ~以外の文字は問題ありません。 またPHP上で発行クエリ文を表示させると、まだ~となっているので、MySQL側の問題だとは思っているのですが、どう設定すればよいかわからないところです。 MySQL Query Browzerからでも同様になってしまいます。 ご存知の方おられましたら、情報よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数135
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • fxdwg99
  • ベストアンサー率45% (43/94)

~は結構鬼門で、UTF8では2つのコードが割り当てられています。 「~(U+FF5E)」と「~(これが上下反転した形状)(U+301C)」です。 SJISからUTF8に変換すると後者に割り当てられるようで、UTF8を SJISに変換すると?になってしまう、という現象があったと覚えています。 そのときの回避策は出力時にバイナリ置換してU+301CをU+FF5Eに しました。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 なるほど、なかなか一筋縄にはいかないものなんですね。 いろいろ試してみて、あるテーブルのみで起こっていたので、なぜかなと悩んでいたのですが、エクスポートで、create table文を出力してみると、なぜか一部のカラムのみ文字コードが ujis として記録されていたようでした。 自分では設定したつもりも記憶もなかったので気づきませんでした。基本はデータベース単位でのみ文字コードを決めており、テーブル単位でも文字コードを設定できることは知っていましたが、カラム単位でまでできるとは知りませんでした。 そのカラムに設定されていた文字コード指定を削除したところ、直りました。 文字コードに関しては、よく問題になってしまいますが、勉強になりました。ありがとうございました。

関連するQ&A

  • MAMPのMySQLで文字化けする

    すみません、教えてください(><) mac( os X 10.7.5)でMAMP+Eclipse+PHPを使って以下のようにMySQLにデータ挿入 mysql_connect('localhost','root','root') or die(mysql_error()); mysql_select_db('mymy'); mysql_query('SET NAMES UTF-8'); mysql_query('INSERT INTO item SET id=1, name="あいうえお"'); をしたのですが、 phpMyadminからデータを確認してみると日本語が文字化けしてしまいます。 (phpMyadminからデータを挿入した場合はちゃんと表示されます。) 色々と調べ、 Eclipseの環境設定でワークスペースの文字コードやphpの文字コードをUTF-8にしたり、 MySQLのmy.cnfファイルの中に以下 [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_unicode_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 を追加して再起動し、DBを一旦削除して再度作り直して挿入してみたりとやったのですが、改善されません。 サーバ接続の照合順序 は「utf8_general_ci」として作成しています。 コンソールからMySQLへ接続してDBの文字コードを確認してみると character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /Applications/MAMP/Library/share/charsets/ | というかたちになっています。 他にどういった点を改善すればいいのでしょうか? もうお手上げ状態でどうすることも出来ずにいます。。。

  • MYSQLの文字化けについて

    MYSQLの文字化けについて質問させてください。 MYSQL COMMAND LINE CLIENTでMYSQLに作ったデータベースに下記のSQL文でデータを入れると、下記のエラーが出ます。 sql 「insert into テーブル名 (id、type)values (1,'男性’);」 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'type’at row 1 文字化け対策として、調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysqldump] default-character-set =utf8 ちなみにその他情報です。 MySQLのバージョン MySQL 5.1 MySQLで有効になっている文字コード character_set_client | utf8 character_set_connection | utf8 character_set_database | utf8 character_set_filesystem | binary character_set_results | utf8 character_set_server | utf8 character_set_system | utf8 何かお解かりになることがありましたら、宜しくお願いします。

  • PHP+MySQLいくら解決策をやっても文字化け

    PHP、MySQL初心者です。 MAMPを使って開発を行っているのですが、 どうやっても ターミナル内の日本語 PHPmyadminでinsertした日本語 MySQLから吸い出したPHPデータの日本語(apacheを使ってローカルサーバーで確認) PHPからinsertした日本語 が文字化けをし、 ??????? みたいな感じになります。 色々調べできる限りはやりましたがダメです。 --------------------------------------------------------------- 環境は Mac OS X 10.6.5 snow leopard MAMP1.9.2 PHP5.3.2 MySQL5.1.44 phpMyAdmin3.2.5 Apache2.0.63 --------------------------------------------------------------- 行った解決策 (1) /Applications/MAMP/Library/share/mysql/ にあるmy-medium.cnfをコピー /Applications/MAMP/db/mysql/ に入れmy.cnfにリネーム [mysqld] default-character-set=utf8 init-connect=SET NAMES utf8 character-set-server = utf8 collation-server = utf8_general_ci skip-character-set-client-handshake [mysql] default-character-set=utf8 を追記 (2) MAMP/conf/php5.3 にあるphp.iniを 変更前:;default_charset = “iso-8859-1″ 変更後:default_charset = “UTF-8″ 変更前:magic_quotes_gpc = On 変更後:magic_quotes_gpc = Off 変更前:;mbstring.language = Japanese 変更後:mbstring.language = Japanese 変更前:;mbstring.internal_encoding = EUC-JP 変更後:mbstring.internal_encoding = UTF-8 変更前:;mbstring.http_input = auto 変更後:mbstring.http_input = auto 変更前:;mbstring.detect_order = auto 変更後:mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII (3) phpデータ内のheadに <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> を記述 もちろん上記の設定後にMAMPの再起動等しております。 ちなみに ターミナルにて show variables like "char%"; を行ったところ +--------------------------+-----------------------------------+ | Variable_name | Value +--------------------------+-----------------------------------+ | character_set_client | utf8 | character_set_connection | utf8 | character_set_database | utf8 | character_set_filesystem | binary | character_set_results | utf8 | character_set_server | utf8 character_set_system | utf8 | character_sets_dir | /Applications/MAMP/Library/share/mysql/charsets/ となっております。 どうしたら文字化けが治るのでしょうか? かなり調べましたが、つんでます。 お願いします。

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

    php(utf-8)を使ってmysqlで簡単なサイトを作ってみましたが, 日本語をフォームから入力して、表示するとき、ブラウザではまったく問題ないのですが、 phpMYadminでデータベースを開くとの日本語部分が文字化けして読めません。 ローカルでは問題ないので、サーバーの問題かとおもい、 他のサーバー(ロリポップ)にphpとsqlをテストでコピーしてみましたら大丈夫でした。 何かの設定かと思い、 mysql> SHOW VARIABLES LIKE 'char%';でチェックし比べてみたところ 正常(ローカル、ロリポップともに)のものは character set client utf8 character set connection utf8 character set database utf8 なのに 文字化けするほうは(北米のサーバー) character set client latin1 character set connection latin1 character set database latin1 でした。文字コードのデフォルトが違うからだと思い、ググって見たところ、 結構よくある問題で、my.cnf でデフォルト文字設定utf-8に変更するなどで解決できるとありました。 でも、使っているサーバーは予めphpMYadminがインストールされているレンタルサーバーであるのでmy.cnfはさわれないのでは??? サーバー会社に連絡して変更可能かと聞いたところ、my.cnfを変更することはできません。またデータベースのサポートはいたしません。と冷たく返答。サーバー会社を変えたいところですが、自分が借りたサーバーではないのでそのまま使うしかありません。 ただ、教わった、sqlコマンドからALTER DATABASE <your_database_name> CHARACTER SET utf8 COLLATE utf8_general_ci を実行したところcharacter set databaseのみutf8になりました。(文字化けは一緒) character set connection とcharacter set database をmy.cnfをいじらず、sqlコマンドで変更可能なのでしょうか? もし、無理ならばどのような方法があるのでしょうか? サイトのフォームからの送信と受信はUTF-8に設定しています。 (だからだとおもいますが、ブラウザの表示だけは文字化けせずにでます。) お知恵がありましたらよろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlコマンドラインのことで・・・・

    はじめまして。 今、LinuxのCentOSでmysqlをインストール(yumで)しコマンドラインでデータベースを作成し、insert文で日本語を入力したのですが、なぜか文字化け?をしてしまう現象が起きております。 いろいろ調べた結果どうやらダブルクウォートとか()で囲むとばけるみたいです。 現象) mysql> insert into test (1,"聽聽聽・ ") ※本来は↓ mysql> insert into test (1,"あああああああ"); でも、ふしぎなことにメモ帳で書いたものを貼り付けると文字化けはせず、正常うまくいきshow コマンドでデータを見ることができます。 他にもデータベース名を日本語にしてもうまくいきます。 mysql> create database あああああ; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | あああああ | +--------------------+ 4 rows in set (0.00 sec) ちゃんと消すこともできます。 insertだったり、updateなどでデータ(””や()で囲むと?駄目?)をコマンドラインで更新すると化けてしまいます。 もしお分かりになる方がいらっしゃいましたら宜しくお願いします。 ■サーバ情報 Linux CentOS 5.3(final) カーネル 2.6.18-164.el5 MySQL version 5.0.77 mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.06 sec) ■my.cnfの設定 [client] default-character-set = utf8 [mysqld] default-character-set = utf8 skip-character-set-client-handshake [mysql] default_character_set = utf8 ※関係ないと思いますが一応i18nの設定も cat /etc/sysconfig/i18n LANG="ja_JP.UTF-8" SUPPORTED="ja_JP.UTF-8:ja_JP:ja" SYSFONT="latarcyrheb-sun16" ※ターミナル設定もutf8になっております。 宜しくお願いいたします。

  • phpmyadmin 文字化け

    phpmyadmin 文字化けを開きテーブルを見ると日本語が化けてしまいます。 php のプログラムからは読み書き、表記は正しくできます。 いろいろ調べ以下をやったのですがだめでした。 「MySQLの設定」 # vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql old_passwords=1 default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 #skip-character-set-client-handshake ※最終的にコメントアウト [mysql] default-character-set = utf8 [mysqldump] default-character-set = utf8 MySQLをリスタートする。 # /etc/rc.d/init.d/mysqld restart 「phpMyadminの設定」 # vi /var/www/phpmyadmin/config.inc.php $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['FilterLanguages'] = ''; $cfg['DefaultCharset'] = 'utf-8'; $cfg['AllowAnywhereRecoding'] = TRUE; apache再起動 何か足りない点はありますでしょうか? 環境は以下です。 phpMyAdmin &#8226;バージョン情報: 3.5.1 (最新版) &#8226;サーバ: Localhost via UNIX socket &#8226;ソフトウェア: MySQL &#8226;ソフトウェアバージョン: 5.1.61 - Source distribution &#8226;プロトコルバージョン: 10 &#8226;ユーザ: root@localhost &#8226;サーバの文字セット: UTF-8 Unicode (utf8)

    • ベストアンサー
    • MySQL
  • UTF-8にしても文字化けが直らない

    XAMPPでPHPとMySQLを使っています。 しかし、そのまま使うと文字化けが起きてしまいます。調べると「UTF-8」にすることで文字化けが起こらないとのことなので変更をし、以下のように全てutf-8に書き換えることができました。 mysql> show variables like 'char%' -> ; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:\program\xampp\mysql\share\charsets\ | +--------------------------+----------------------------------------+ しかし、それでも文字化けは直りませんでした。以下のコマンドで原因を確かめてみました。 mysql> use testdb; Database changed mysql> status -------------- Server characterset: utf8 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 Db characterset: latin1が原因だと思い、以下のコマンドを実行しました。 alter database testDB character set utf8; そしてもう一度テーブルを作りなおすと今度は文字化けどころか空白になってしまいました。 なにが原因で文字化け等が起こっているのか分かりません。助けてください。 OSは Windows Vista です。 バージョンは ApacheFriends XAMPP version 1.7.7 + Apache 2.2.21 + MySQL 5.5.16 (Community Server) + PHP 5.3.8 (VC9 X86 32bit thread safe) + PEAR です。 回答よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • xamppのMySQLの文字化け

    いつもお世話になっております。 xamppをインストールし、開発を行っております。 formでsubmitし、DBに登録すると文字化けを起こします。 MySQLは下記項目を追加しました。 C:\xampp\mysql\bin\my.ini -------------------------------------------------- [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake character_set_server=utf8 init-connect=SET NAMES utf8 (ここに default-character-set = utf8 を追加するとMySQLが起動しなくなります。) [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 php.iniは下記のように設定してあります。 php.ini -------------------------------------------------- mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input UTF-8 mbstring.http_output UTF-8 mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) mbstring.internal_encoding UTF-8 mbstring.language Japanese mbstring.strict_detection Off mbstring.substitute_character no value 日本語が正しく登録されていれば、表示は正しくされます。 おかしな部分、足りない部分等ありましたら、ご教示ください。 よろしくお願いいたします。 [環境]  MySQL:5.5.8  PHP:5.3.5  xampp:1.7.4

    • ベストアンサー
    • MySQL
  • phpMyAdminの文字化け

    いつもお世話になっております。 phpMyAdminで文字化けをしてしまいます。 文字コードは全てutf-8で統一しております。 (PHPファイル、データベース) (1)MySQLの設定を変更→解決せず -------------------------------------------------- # vi /etc/my.cnf ↓ ---------- ここから追加 ---------- ↓ [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 ↑ ---------- ここまで追加 ---------- ↑ :wq -------------------------------------------------- (2)phpMyAdminの設定を変更→解決せず -------------------------------------------------- $cfg['DefaultLang'] = 'utf-8'; $cfg['DefaultCharset'] = 'utf-8'; テーブルの照合順序とカラムの照合順序をutf8_unicode_ciに 変更いたしましたが、ダメでした。 -------------------------------------------------- (3)phpからデータベースに接続直後、SET NAME utf-8を実行→解決せず -------------------------------------------------- function db_conn() {  $db_link = @mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD));  if ($db_link) {   mysql_select_db(DB_DATABASE);   mysql_query('SET NAMES utf-8');   return $db_link;  } } ご教授お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Enterprise Linux ES[ v.4 ] MySQL:4.1.20 PHP:4.3.9

    • ベストアンサー
    • MySQL
  • phpからMySQLへの日本語文字化けについて

    phpからMySQLへの日本語文字化けについて こんにちは。お分かりの方は教えてください。 現在、「ハッスルサーバー」を利用しwebのphpからMySQLサーバーへの 情報登録画面を作成しています。 登録内容で数値やメールアドレスなどの「1バイト文字」ですと 問題ないのですが、日本語の「2バイト文字」ですと文字化けが 発生してしまいます。 phpやMySQLに知識が無いため色々と調べて試したのですが 正しく登録できませんでした。 試した結果とサーバー/DBの状況は以下の通りです。 ※サーバー/DB ・バージョン:5.0.90-log ・文字セット:UTF-8 Unicode (utf8) ・接続照合順序:utf8_general_ci ・種別:MyISAM ・Variable_name:Value ・character_set_client:utf8 ・character_set_connection:utf8 ・character_set_database:utf8 ・character_set_filesystem:binary ・character_set_results:utf8 ・character_set_server:utf8 ・character_set_system:utf8 ・character_sets_dir:/usr/local/share/mysql/charsets/ ※phpファイルにて試した設定 //接続 $objCon = mysql_connect(C_SERVER, C_USER, C_PASSWORD); //文字コード // mysql_query("SET NAMES SJIS"); ←文字コードを左の2パターンで // mysql_query("SET NAMES UTF8"); ←どちらかに切り替えて実行しました。 //データベース $objSecDB = mysql_select_db(C_DB_NAME); //**********SQL(Insert)**********// $strSql = ""; $strSql = $strSql . "Insert Into XXXXX "; $strSql = $strSql . "("; $strSql = $strSql . "KeyNo,"; $strSql = $strSql . "E_Mail,"; $strSql = $strSql . "Title"; $strSql = $strSql . ") "; $strSql = $strSql . "Values "; $strSql = $strSql . "("; $strSql = $strSql . " " . mysql_real_escape_string($intKeyNo) . ", "; //KeyNo $strSql = $strSql . " " . mysql_real_escape_string($strEmail) . ", "; //E_Mail $strSql = $strSql . "'" . mysql_real_escape_string($strTitle) . "' "; //Title $strSql = $strSql . ")"; //SQL発行 $blnRet = mysql_query($strSql); ・上記のソース内に記しましたが文字コードを2パターン切り替えて  実行しましたが文字化けや空文字が登録されました。 どなたか対処方法をお分かりの方はお教えください。 よろしくお願いします。

    • ベストアンサー
    • MySQL