baserCMS LOLIPOP! MySQL5.7の文字コード/照合順序

baserCMS LOLIPOP! MySQL5.7の文字コード/照合順序

先日、「ロリポップ!レンタルサーバー」で利用できるデータベース(新規作成時)がMySQL5.7(現時点で5.7.36)になりました。 画像の説明

レスポンシブ対応のテンプレートなどを使用してサイトを公開した場合、当然のようにスマホやタブレットからアクセスされるケースは多くなるわけですが、アクセスの解析データを見ても、それらのアクセス数はサイト全体の50%を下回ることは昨今もうなくなりました。 そうなってくると、不特定のサイト閲覧者によって問い合わせフォームやブログコメント欄から4バイトの絵文字キャラクターが入力されるケースも当然多くなってきます。

これまでLOLIPOP!で提供されていたMySQL5.6のサーバー側の文字コードは、標準で utf8 になっていたため、作成したDBの文字コードも基本的に utf8 となり、4バイトの絵文字キャラクターを含んだデータをDBに格納しようとする段階で絵文字キャラクター自体が正しく格納されないばかりか、絵文字キャラクター以降の全ての文字列がDBには格納されないという問題が起こっていました。

画像の説明

今回アップデートされたMySQL5.7を使ってbaserCMS(4.5.1以降)をインストールした場合、 上図のように、基本的な文字コードは、utf8mb4 、テーブル(カラム)の照合順序は、utf8mb4_general_ci になります。 これによって、主にスマホ、携帯などによって、①問い合わせフォームやブログコメント欄から入力される可能性のある4バイトの絵文字の文字化け、②絵文字以降の入力情報の欠落などの問題は、基本的に解消できるようになりました。

ですが、現時点の「ロリポップ!レンタルサーバー」で提供されているサイト作成ツールの「baserCMS簡単インストール」を利用してインストールした場合は、baserCMSのバージョンが4.4.7のため、テーブル(カラム)の照合順序は、一部を除いて「utf8_general_ci」となりますので、(事情は、「fix #1055 【インストーラー】MySQLを利用してインストールすると照合順序が複数混在する場合がある問題を解消」 )この場合は、上記 ① ② の問題解決に必要なカラムの照合順序を個別に「utf8mb4_general_ci」に変更することで、比較的容易に解消することができます。

また、/app/Config/database.php'encoding' => 'utf8''encoding' => 'utf8mb4' に変更することで、BaserCMS側でも絵文字を表示できることも確認しています。


参考サイト: MySQL(InnoDB) で charset を utf8mb4 にする注意点の現在

コメント


コメントする


YEwAW7