LAMP環境に関するちょっとした知識。
MySQL:Got Error 127 †
この前phpMyAdmin
からMySQL
をいじっていたら、
#1030 Got error 127 from table handler
なんていうエラーが出た。これが出るということはテーブルが破損しているかもしれないということらしい。以下のSQLでテーブルの状態を調べられる。
check table テーブル名 extended
で、壊れていたら以下のSQLで修復する。
repair table テーブル名
この辺はしっかりマニュアルを読んでおくといざというとき焦らずに済む。
MySQL:接続文字コードの設定による文字化け †
MySQL4.1以降で、日本語データをPHPスクリプトからやり取りすると文字化けを起こすことがよくある。原因は、クライアントとサーバーの間で文字コードの自動変換を行っているからだとか。よく分からないが。
ともかく、文字化けを起こさないようにするには、MySQLに対してデータを取り出すクエリを送る前に接続文字セットを設定しないといけない。それには次のようなクエリを送ればよい。
SET NAMES utf8
utf8の部分は例えばPHPスクリプトファイルの文字セットにする。こうすれば、文字化けはほとんど抑えられる。 (MySQL内部の文字セット設定によっては、一部の文字が依然として化けたりするようだが)
また、Linux系のサーバーではmy.iniの設定を以下のようにしておくと文字化けしなくなるらしい。
[client] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake
ここでもutf8の部分は他の文字セット、例えばujisなどでも問題ないと思う。が、やはりutf8にしておいた方がいいのかもしれない。
phpMyAdmin:インポートとファイル文字コード †
phpMyAdminを経由して日本語を含むSQLをデータベースにインポートする場合、特に文字コードに気をつけないとひどい文字化けが発生する。この時気をつけるべきは以下の3点だと考えられる。
- MySQLの文字コード設定
- phpMyAdminの文字コード設定
- インポート元ファイルの文字コード
これら三つが全て揃っていることがベストだと考えられる。以下では、日本語コードをEUC-JPで統一することを目的にして筆者が行った設定を記す。
まず、MySQLの文字コード設定。これはmy.iniファイルをいじればよい。
[mysql] default-character-set=ujis (中略) [mysqld] (中略) default-character-set=ujis
こんな感じにしておいた。文字セットの設定はもっとできそうではあったが…。
次に、phpMyAdminの文字コード設定。これは非常に分かりにくい。 phpMyAdminのルートディレクトリにconfig.inc.phpファイルを作成し、以下を書き込む。
$cfg['DefaultLang'] = 'ja-euc'; $cfg['Lang'] = 'ja-euc'; $cfg['DefaultConnectionCollation'] = 'ujis_japanese_ci'; $cfg['AllowAnywhereRecoding'] = TRUE; $cfg['DefaultCharset'] = 'euc-jp';
「EUCを使うぞ」という鋼の意思をこれでもかというほど書きなぐっておくといいのでは。もちろん、config.inc.phpには他の設定も書き込んでおく。
これだけ書いておくと、インポートもujis(EUC-JP)でうまくいった。