ブログ ひまつぶし

バイクとシモネタが好きなへっぽこプログラマのおバカなブログ。

MacでMySQL 文字化けをなおす

2013-12-06 00:02:38 | 言語・DB・開発その他
前回、文字化けが出たので、今回は文字化けを直します。

まず、MySQLの設定ファイル、OSXはUNIX系なので「my.cnf」が「/etc」内になければなりません。
なので「/usr/local/mysql/support-files/my-default.cnf」を名前を変えて「/etc/my.cnf」と名前を変えて、コピーしなければなりません。
「cp」コマンドでコピーするのですが、「アクセス権限がない」と怒られましたので、「su -」コマンドでrootユーザになって、コマンドを実行しなければなりません。
しかし、Macはデフォルトで、rootユーザが無効になっているため、rootユーザを有効にします。

Mac OS X で「ルート」ユーザを有効にして使用する

このアップルのヘルプには次のように書かれています。

ルートユーザを有効にする方法
OS X Lion (10.7) 以降(ヘルプページにはそれ以前のバージョンのOSXについての方法も記述あり)

1.Apple メニューから「システム環境設定」を選択します。
2.「表示」メニューから「ユーザとグループ」を選択します。
3.鍵アイコンをクリックし、管理者アカウントで認証します。
4.「ログインオプション」をクリックします。
5.右下の「編集」または「接続」ボタンをクリックします。
6.「ディレクトリユーティリティを開く」をクリックします。
7.「ディレクトリユーティリティ」ウインドウの鍵アイコンをクリックします。
8.管理者アカウント名とパスワードを入力し、「OK」をクリックします。
9.「編集」メニューから「ルートユーザを有効にする」を選択します。
10.利用するルートパスワードをパスワードフィールドとその確認用フィールドに入力し、「OK」をクリックします。

これで、rootユーザーを有効にすることができました。

ここから、rootユーザーでログインをして、
「/usr/local/mysql/support-files/my-default.cnf」を、
「/etc/my.cnf」としてファイル名を変えてコピーします。
-------------------------------------------------------------------

ucchanx$ su -
Password:
root# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
root# ls /etc
my.cnf
-------------------------------------------------------------------


そして、「/etc/my.cnf」の中身を編集します。
テキストエディタは「vi」を使いました。
端末でのコマンド入力は「vi /etc/my.cnf」です。
viの使い方はググれば出てきますが、実際に使ったviのコマンドは以下のとおり。
「i」:編集モードにする
「esc」:コマンドモードにする
「:wq」:コマンドモードでこれを入力すると、保存して終了
「:w」:コマンドモードで入力すると保存(終了しない)
「:q」:コマンドモードで入力すると終了(保存しない)


-------------------------------------------------------------------

[mysqld]

(中略)

sql_mode=ANSI,NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server = utf8
skip-character-set-client-handshake

-------------------------------------------------------------------

「ANSI,」について、MySQLはインストール状態ではANSIの国際規格のSQLに一部しか対応していないため、国際規格のSQLに完全対応するために書きました。
character-set-server = utf8」は、文字コードをUTF-8にして、
skip-character-set-client-handshake」は特に指定がない場合、サーバーの文字コードと同じものを使うようにする設定。

これで、MySQLを再起動して確認したら

-------------------------------------------------------------------

mysql> show variables like 'character%';
+--------------------------+------------------------+
| Variable_name | Value |
+--------------------------+------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |

(以下略)

-------------------------------------------------------------------

すべて、UTF-8になっていたけど、「use study;」で、文字コード設定前のデータベースを指定すると、
| character_set_database | latin1
になっている。

だから、一旦「study」データベースは削除して作りなおさなければならないということみたいです。

-------------------------------------------------------------------

mysql> drop database study;
Query OK, 10 rows affected (0.01 sec)

mysql> create database study;
Query OK, 1 row affected (0.00 sec)

mysql> use study;
Database changed
mysql> show variables like 'character%';
+--------------------------+------------------------+
| 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/mysql-5.6.14-osx10.7-x86_64/share/charsets/ |
+--------------------------+-------------------------+
8 rows in set (0.00 sec)
-------------------------------------------------------------------

これで、すべての文字コードがUTF-8になったので、クエリを流してみる。

-------------------------------------------------------------------
mysql> source /Users/ucchanx/Desktop/school.sql
ERROR 1051 (42S02): Unknown table 'study.seito'
ERROR 1051 (42S02): Unknown table 'study.kyoin'
ERROR 1051 (42S02): Unknown table 'study.shouyo'
ERROR 1051 (42S02): Unknown table 'study.yakushoku'
ERROR 1051 (42S02): Unknown table 'study.kurabu'
ERROR 1051 (42S02): Unknown table 'study.kamoku'
ERROR 1051 (42S02): Unknown table 'study.shumoku'
ERROR 1051 (42S02): Unknown table 'study.undokai'
ERROR 1051 (42S02): Unknown table 'study.seiseki'
ERROR 1051 (42S02): Unknown table 'study.tsuchihyo'
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)
(以下略)
-------------------------------------------------------------------

冒頭のエラーは
DROP TABLE SEITO;
DROP TABLE KYOIN;
DROP TABLE SHOUYO;
DROP TABLE YAKUSHOKU;
DROP TABLE KURABU;
DROP TABLE KAMOKU;
DROP TABLE SHUMOKU;
DROP TABLE UNDOKAI;
DROP TABLE SEISEKI;
DROP TABLE TSUCHIHYO;
を実行した時に、データベース作りたてで、テーブルがないので出ているだけで、何も問題はない。

テーブル作成SQLの冒頭に「DROP TABLE」を書いていれば、次回以降同じクエリを流すときに、手作業でテーブルを削除する手間が省けるからです。

-------------------------------------------------------------------

mysql> select * from kurabu;
+-------------+------------+
| KURABUBANGO | KURABUMEI |
+-------------+------------+
| 1 | 野球部 |
| 2 | サッカー部 |
| 3 | ドッジボール部 |
| 4 | なわとび部 |
| 5 | 昆虫集め部 |
| 6 | かくれんぼ部 |
| 7 | お絵かき部 |
| 8 | 本読み部 |
+-------------+------------+
8 rows in set (0.00 sec)

-------------------------------------------------------------------

これで、今日からSQLの勉強ができますね。


[参考サイト]
MySQLの文字化け。原因と修正方法がけっこうややこしくて途方に暮れかけた・・・けど!

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。