Hatena::Grouparaistudy

czk-htnの日記

2010-02-10

[] 4.1.22 で 文字化けに対処する 10:00

Shift-JISCSVファイルをLOAD DATAすると盛大に文字化けするので文字化け問題を本気で直す - ヽ( ・∀・)ノくまくまー(2006-10-11)を参考に直してみた。


↓まずは現状確認。見事にlatin1。

mysql> show variables like "char%";
+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | latin1                                  |
| character_set_connection | latin1                                  |
| character_set_database   | latin1                                  |
| character_set_results    | latin1                                  |
| character_set_server     | latin1                                  |
| character_set_system     | utf8                                    |
| character_sets_dir       | /Users/owner/share/mysql/charsets/      |
+--------------------------+-----------------------------------------+
7 rows in set (0.00 sec)

今回扱うデータベースsjis なので。set names sjisしてみる。接続環境だけ sjis になるけどデータベース内部が sjis になってくれるわけじゃない。

mysql> set names sjis;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "char%";
+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | sjis                                    |
| character_set_connection | sjis                                    |
| character_set_database   | latin1                                  |
| character_set_results    | sjis                                    |
| character_set_server     | latin1                                  |
| character_set_system     | utf8                                    |
| character_sets_dir       | /Users/owner/share/mysql/charsets/      |
+--------------------------+-----------------------------------------+
7 rows in set (0.00 sec)

データベースデフォルトキャラクターセットを変更して、データベースを作り直す。

~/.my.cnf でデフォルトキャラクターセットを宣言しておく。(試験用に自分専用にデーターベースを起動しているので、一般的には /etc/my.cnf を修正する)。

[mysqld]
default-character-set=sjis
skip-character-set-client-handshake

↓ 一度 mysqld を再起動する。(mysqlMacPorts のを使っている)

$ sudo mysqladmin shutdown
$ /opt/local/bin/mysqld_safe &
$ 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       | /Users/owner/share/mysql/charsets/      |
+--------------------------+-----------------------------------------+
7 rows in set (0.00 sec)

sjisになった!

データベースを作り直す

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

mysql> status
--------------
mysql  Ver 14.7 Distrib 4.1.22, for apple-darwin9.8.0 (i686) using  EditLine wrapper

Connection id:          1
Current database:
Current user:           owner@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         4.1.22-log
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    sjis
Db     characterset:    sjis
Client characterset:    sjis
Conn.  characterset:    sjis
UNIX socket:            /Users/owner/var/run/mysqld/mysqld.sock
Uptime:                 2 min 38 sec

Threads: 1  Questions: 8  Slow queries: 0  Opens: 11  Flush tables: 1  Open tables: 5  Queries per second avg: 0.051
--------------

CSV ファイルを読み直してみる。

mysql> connect test
Connection id:    2
Current database: test

mysql> source ~/Documents/lang/mysql/load_data/create_table.sql
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> LOAD DATA LOCAL INFILE '~/Documents/lang/mysql/load_data/user_data.csv'  REPLACE INTO TABLE t_user 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
Query OK, 2 rows affected (0.00 sec)
レコード数: 2  削除: 0  Skipped: 0  Warnings: 0

読み込みが完了したので、SELECT文で確認してみる。

screen を使っている場合はこれも必要。Ctrl-a (Ctrl-t) したあと 画面下に":" が表示されたら、

eval 'encoding sjis'
mysql> select * from t_user;
+----+-----------+---------------+
| ID | NAME      | KANA          |
+----+-----------+---------------+
|  1 | ○○ 和樹 | マルワ カズキ |
|  2 | ○○ 郁海 | マルワ イクミ |
+----+-----------+---------------+
2 rows in set (0.00 sec)

直った!

くまくまーの中の人に感謝。

トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100210

2010-01-27

[] MySQL4と5の違いについて 06:42

2010/01/27 現在、MySQLGA(Generally Availlable)リリースバージョンは 5.1。Development リリースバージョンは5.5になっている。

各バージョンのReference Manual "MySQL Change History" にバージョン遷移が記載されている。

  • MySQL 5.1.3 (2005/11/29) 〜 5.1.42 (2009/12/15) 5.0年
  • MySQL 5.0.0 (2003/12/22) 〜 5.0.89 (2009/12/02) 6.0年
  • MySQL 4.1.0 (2003/04/03) 〜 4.1.25 (2008/12/01) 6.5年

3.23, 4.0, 4.1 のサポート(Extended Support)はすでに終わっている(4.1は2009/12/31に終了)ため、マニュアルは2010/12/31までしか入手できない。MySQL :: MySQL 5.7 Reference Manual

5.0 で追加・変更された機能

MySQL 4.1 → 5.0 に追加・変更された機能を調べる。逆にいうと5.0に追加された機能は4.1はもっていないということ。

  • ストアドプロシージャ
  • カーソル
  • トリガー
  • ビュー
  • FEDERATED Storage Engine (OracleのDataLinkみたいなものか?)

5.1 で追加・変更された機能

1千万件を超えるレコードを蓄積するならパーティショニングを使いたいところ。5年規模で考えたら

1000万[行] / (12[月] * 5[年]) = 15万〜70万[行/月]
トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100127