ここを見るかぎり、確かに MySQL 4.1.x と MySQL 5.0以上 は日本語を扱う上で根本的な問題含んでいるようですね・・・
自分の local環境

WinXP MySQL4.1.12a-nt でも上記のエラーが確かにでました
(というかなぜかずっと気づかなかった・・・orz)
さて、解決策ですが、まず私はキャラクターセットをujisにできる限り統一しました。
具体的には
- my.ini において default-character-set=ujis
- MySQL Server Instance Config Wizard を使ってできる限り ujis にカスタマイズ設定しなおした。
- (これは関係ないかもしれないけど)phpMyadmin の config.inc.php において
$cfg['DefaultLang'] = 'euc-jp';
$cfg['DefaultCharset'] = 'euc-jp';
$cfg['AllowAnywhereRecoding'] = FALSE;
$cfg['RecodingEngine'] = 'auto';
そうすると、以下の状態になりました
そして肝心のphpBB2ファイル(こちらで配布してるEUC-JPです
いつもお世話になってます)において
#
#-----[ OPEN ]------------------------------------------
#
db/mysql4.php
#
#-----[ FIND ]------------------------------------------
#
$this->db_connect_id = ($this->persistency) ? mysql_pconnect($this->server, $this->user, $this->password) : mysql_connect($this->server, $this->user, $this->password);
#
#-----[ AFTER, ADD ]------------------------------------------
#
mysql_query("SET CHARACTER SET ujis;", $this->db_connect_id);
|
をやってみました
そうすると一応上記のエラーはなくなり、ちゃんと新規投稿できました
phpMyadminからデータをバックアップするときは、
--
-- テーブルの構造 `phpbb_topics`
--
DROP TABLE IF EXISTS `phpbb_topics`;
CREATE TABLE `phpbb_topics` (
`topic_id` mediumint(8) unsigned NOT NULL auto_increment,
`forum_id` smallint(8) unsigned NOT NULL default '0',
`topic_title` char(60) NOT NULL default '',
`topic_poster` mediumint(8) NOT NULL default '0',
`topic_time` int(11) NOT NULL default '0',
`topic_views` mediumint(8) unsigned NOT NULL default '0',
`topic_replies` mediumint(8) unsigned NOT NULL default '0',
`topic_status` tinyint(3) NOT NULL default '0',
`topic_vote` tinyint(1) NOT NULL default '0',
`topic_type` tinyint(3) NOT NULL default '0',
`topic_first_post_id` mediumint(8) unsigned NOT NULL default '0',
`topic_last_post_id` mediumint(8) unsigned NOT NULL default '0',
`topic_moved_id` mediumint(8) unsigned NOT NULL default '0',
PRIMARY KEY (`topic_id`),
KEY `forum_id` (`forum_id`),
KEY `topic_moved_id` (`topic_moved_id`),
KEY `topic_status` (`topic_status`),
KEY `topic_type` (`topic_type`)
) ENGINE=InnoDB DEFAULT CHARSET=ujis AUTO_INCREMENT=4 ;
|
のように
DEFAULT CHARSET=ujis
を追加しとけば文字化けしなかったです。
以上です。Linuxでうまくいくかどうかわかりませんが、参考になればと思います。