Tag Archives: mysql

Perlでutf8 – パイプとmysql (DBI)

Perlで標準入出力を使うことはよくあることで、use Encode;宣言をした後に、binmode STDIN, “encoding(utf8)” や open($fh, “:encoding(utf8)”, $fn) とするなどしてutf8文字が適切に処理されるようにするが、パイプを利用する場合、STDIN/STDOUT に対する binmode では適切に処理がなされないので、open関数に対する設定を用いる必要がある。たとえば、

open($fh, "-|:encoding(utf8)", $command);

とする。

また、DBIモジュールを用いたMySQLとのやりとりで適切にutf8文字を処理させるためには、DBI->connectを行う際に、mysql_enable_utf8 => 1を明示する必要がある。すなわち、

my $dbh = DBI->connect("dbi:mysql:$dbname;$host:$port", $user, $pass,
{mysql_enable_utf8 => 1});

といったイメージ。なお、これはMySQLサーバーに対するutf8の設定も適切に行われていることが条件。
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/local/mysql/5.0.91/share/mysql/charsets/          | 
+--------------------------+--------------------------------------------------------+

参考サイト

PURGE BINARY LOGS

MySQLを基本初期設定のまま使っていると、いつの間にかmysql-bin.001234のような名を持つGB単位の巨大なファイルがデータディレクトリの下にたくさん作られていることに気付く。これはリプリケーション(Replication)を行うために必要なログファイルだが、それを行わないことも多いし、また、行っていても全てのファイルがいつまでも必要ということはない。
というわけで、気付かぬうちにディスクの肥やしを膨らませないようにするメモを書いておくことにした。

リプリケーションを行う場合は、定期的に標記のコマンドを実行して不要になったログを消去する。詳細はこちら

リプリケーションを行わない場合は設定ファイルmy.cnfに初期状態で記述されている以下の設定をコメントアウトするなり消去する。

log-bin=mysql-bin
binlog_format=mixed