日記
TrackBack文字欠けの原因 (13:51)Edit

2004/3/12

うが、MySQLcharsetを変更したらなんかindexがおかしくなった模様。マニュアルを見ると、「myisamchk -r -q」すればいいっぽく書いてあるんだけど、実際には「doesn't have a correct index definition.You need to recreate it before you can do a repair」とかでて、まともにindexが引けていないっぽい。具体的には、varcharとかのindexがちゃんと作れなくなってしまう(index自体はできるけど、中身ができない)。

仕方ないからrecreateするかと、いったんdrop indexしてからalterしても同じ状態。というか、同じ構造のtableを新規に生成しても、そのtableでも同じエラーがでる。frmファイルに記述されたindex関連の設定がおかしいとか言われるんだけど、新規にfrmファイルを作っても同じエラーがでるってことは、何か根本的におかしくなっているのか。

ググってみたら、同じエラーがでて困っているという話はあるけれども、根本的な解決策は見あたらず。唯一対症療法的な解決策が、http://www.geocrawler.com/archives/3/108/2002/10/0/9937919/にあったんでひとまずそれを適用。

myisamchk --keys-used=0 -rq [/path/to/data]
mysqladmin flush-tables
myisamchk -rqSa [/path/to/data]
mysqladmin flush-tables

ってすると、一応varcharなcolumnに張ったindexもちゃんと作られる(中身ができる。ちゃんと使われているか試してないけど、まあきっと使ってくれてるよね)。ただし、myisamchkすると同じエラーは出続けているんで、indexの設定が腐った状態のままなのは変わらず。


2004/3/11

うちからのTrackBackとかがときどき文字化け(欠け)している原因がわかった。元々は自前(mylogのコード)でTrackBackを送っていたんで、excerptをPHP上で(mb_substrで)切りつめていたんだけど、最近はずっとPingProxyを使っていて、PingProxy側ではexcerptをノーチェックでMySQLのvarchar(255)につっこんでしまっていて、しかも今までMySQLのcharsetがちゃんと(ujisに)設定されていなかったんで、varchar(255)への切りつめ時に最後の文字が1/2の確率で化けて(欠けて)いたってことなのか。というわけで、my.cnfの[mysqld]にdefault-character-set=ujisを追加しつつ、PingProxyで投稿を受け付ける際にもきちんとexcerptをmb_substrで切るように変更。

Published At2004-03-11 00:00Updated At2004-03-11 00:00