Drupalで一部が文字化け

Drupalを使ったサイトで文字化けが発生。しかしコンテンツ作成とかからページを作る時にはちゃんと日本語を受け付けている。

その場合、Mysqlのテーブルの文字コード、あるいはテーブルのフィールドの文字コードに問題がある。

show create table \G

*************************** 1. row ***************************
       Table: questionnaire
Create Table: CREATE TABLE `sample` (
  `sid` int(11) NOT NULL auto_increment,
  `uid` int(11) NOT NULL default '0',
  `q` text,
  `c` text character set latin1,
  PRIMARY KEY  (`sid`)
) ENGINE=MyISAM AUTO_INCREMENT=19935 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

この場合、テーブルのデフォルトの文字コードがlatin1に、またフィールド'q'、'c'の文字コードもlatin1になっている。そうすると、Drupal文字コードUTF8とバッティングするため入力した日本語がすべて???になったり、INSERTを発行した際に文字列でエラーになる。

自分で作成したカスタムテーブルやモジュールで発生しやすい。

alter table sample CHARSET=utf8;
alter table sample change c c text character set utf8;

で修正する。