メインコンテンツに移動
Drupalのhook_schema()で文字照合の指定はできない(UTF8に固定されている)
問題点:カスタムモジュールでデータ作成時にエラーが発生: Invalid datetime format: 1366 Incorrect string value: '\xE5\xAE\x89\xE7\x9D\xA1'
- カスタムモジュール内でdb_insert()関数でカスタムテーブルにデータを挿入します
- データ挿入がうまくかないので、サイトのレポート(ホーム » 管理 » レポート)を確認したら、DBエラーが発生: PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xE5\xAE\x89\xE7\x9D\xA1' for column 'vocabulary' at row 1: 。。。
- 文字化け現象のようで、テーブルの文字セットを確認してみたら、やはり文字セットがUTF8ではなかったです(DrupalはUTF8に指定している)
原因:手動でカスタムテーブル作成時に文字照合設定を初期値のままでしたせい
- 今回のテーブルはカスタムモジュールのインストールファイルにあるhook_schema()の定義で生成したものではなく、手動で作成したものでした。
- すでにカスタムモジュールがインストール/有効化の状態で、カスタムテーブルはあとで追加したものです
- 手動でテーブルを作成時に、文字照合設定は行わずに、初期値のままで作成しました
- 今度手動でテーブルを作成時に、文字照合設定は忘れではいけないですね
Drupalのhook_schema()ではテーブルの文字照合設定はありません
- hook_schema()の文字照合設定項目はありません
- テーブルの文字照合初期設定はUTF8を指定しているようです