問題
- 絵文字記号は、例えば新しいWebコンテンツの一部として、データベースに保存することはできません。
- Liferayサービスのログでは、このようなエラーが発生します。
[JDBCExceptionReporter:234] Incorrect string value: '\xF0\x9F\x8F\x80</...' for column 'content' at row 1
環境
-
utf8
charsetにデータベースを持つLiferay PaaS。-
これは、MySQL Client:で確認できます。
SELECT schema_name AS 'database', default_character_set_name AS 'charset', default_collation_name AS 'collation' FROM information_schema.SCHEMATA WHERE schema_name = 'lportal';
+----------+---------+-----------------+
| database | charset | collation |
+----------+---------+-----------------+
| lportal | utf8 | utf8_general_ci |
+----------+---------+-----------------+
1 row in set (0.001 sec)
-
解決
- MySQL の
utf8
文字セットは、1~3 byteの UTF-8 エンコードされたシンボルの保存のみをサポートしています。 unicodeを完全にサポートするためには、代わりにutf8mb4
の文字セットを使用する必要があります。 -
新しいプロジェクトの場合(データ損失あり)
-
database/LCP.json
を修正し、環境変数LCP_GCP_DATABASE_CHARSET"."utf8mb4"
をデータベースサービスがデプロイされる各環境に追加します。
...
"environments": {
"infra": {
"deploy": false
},
"prd": {
"env": {
"LCP_GCP_DATABASE_CHARSET": "utf8mb4"
}
},
"uat": {
"env": {
"LCP_GCP_DATABASE_CHARSET": "utf8mb4"
}
},
"dev": {
"env": {
"LCP_GCP_DATABASE_CHARSET": "utf8mb4"
}
}
}
... - 新しいビルドを作成します。
prd
環境で作業している場合は、必要な場合に備えて完全なバックアップを作成してください。- Liferay PaaS コンソールから既存のデータベース サービスを削除します。 この操作は、データベースも削除しようとしています。
- 新しいビルドをデプロイします。
-
-
既存のプロジェクトの場合(データ損失なし)
- バックアップをダウンロードします。
- 空のMySQLデータベースにダンプをインポートします。
- データベースを
utf8
からutf8mb4
に変換します。 特定のツールをご存知無い場合は、この この記事で手動のプロセスを見つけることができます。 - Liferay Cloudへの移行 ガイドに従って、変換されたデータベースのダンプを取得し、完全なバックアップをアップロードします。
-
新しいプロジェクトプロセスの手順1〜5に従って、Liferay Cloudにクリーンな
utf8mb4
データベースを作成します。 - ステップ4でアップロードした完全なバックアップを復元します。
注意: 古い utf8
のバックアップを utf8mb4
データベースにリストアすると、 utf8mb4
の構成が失われます。
追加情報