FC2ブログ

MySQLコマンドプロンプトの日本語の扱い

WindowsへMySQL5.1をインストールし、全体的にUTF-8で文字コードを設定したのですが、
コマンドプロンプトからINSERTやSELECTを実行すると文字化けが発生しました。
DBMS(MySQL)の設定はUTF-8のままで、利用するクライアントの設定で上手く対処できない
か調べて実験してみた結果をメモしておきます。


■MySQLで日本語を含むレコードのインサートができない
 MySQLへコマンドプロンプトからの日本語(マルチバイト文字)を含んだレコードをインサートしたら
 以下のようなメッセージが出力された。
 ERROR 1366 (HY000): Incorrect string value: '\x9......' for column ..... at row 1
 
 全体的に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 | C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ |
 +--------------------------+---------------------------------------------------------+
 8 rows in set (0.00 sec)
 
 調べてみたら、Windwosのコマンド入力はShift-JISで中はUTF-8として扱っているから「間違った文字(Incorrect string)」
 として怒られている模様であることが分かった。
 
 そこで、クライアント(プロンプト) からの入力は、Shift-JISと設定してみる事に。
 mysql> SET character_set_client = sjis;
 Query OK, 0 rows affected (0.00 sec)
 
 その結果、日本語(マルチバイト文字)を含むレコードインサートできた。

■MySQLで日本語を含むレコードのSELECTで文字化けが起こる
 今度は、SELECTをしてみたのですが、表示が文字化けしている。
 先ほどのキャラクタセットの表示に「character_set_results」があったのを思い出したので、
 とりあえずそこを変えてみることに。
 mysql> SET character_set_results = sjis;
 Query OK, 0 rows affected (0.00 sec)
 
 その結果、SELECTでの表示結果も正しく日本語を表示することができました。
 
■最終的な設定
 最終的にこんな感じになりました。
  ○ character_set_client  utf8 → sjis
  ○ character_set_results utf8 → sjis
 mysql> show variables like '%char%';
 +--------------------------+---------------------------------------------------------+
 | Variable_name | Value |
 +--------------------------+---------------------------------------------------------+
 | character_set_client | sjis |
 | character_set_connection | utf8 |
 | character_set_database | utf8 |
 | character_set_filesystem | binary |
 | character_set_results | sjis |
 | character_set_server | utf8 |
 | character_set_system | utf8 |
 | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ |
 +--------------------------+---------------------------------------------------------+
 
■今回変更したパラメタの意味
 パラメタの意味的にはこんな感じのようです。
 ☆character_set_client
  クライアントが使用する文字コード(この文字コードでサーバへ送信)
  ※サーバでは「character_set_connection」を「utf8」に設定しているので、
   格納時はUTF-8への文字変換が行われ、サーバ上のデータはUTF-8と想定
 ☆character_set_results
  SQLコマンド「SELECT」などのSQL文結果をサーバからクライアントに返す際の文字コード。

 ※この認識は正しいのかなぁ。。
スポンサーサイト



コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

同じところで引っかかっておりまして非常に助かりました!ありがとうございます!!
プロフィール

romanesque

Author:romanesque
ソフトウェアの開発やら運用やらいろいろとやってきました。最近は世間で言うSE職とやらをやっています。

このブログでは、「気の向くまま」を基本コンセプトに思った事(仕事~趣味)を書いていこうと思っています。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR