Jira サーバーで絵文字付きのコメントの保存に DataAccessException エラーで失敗する

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

このページの内容は、アトラシアン サポートの提供内容ではサポートされないデータベース更新に関連します。このため、アトラシアンでこの内容についてのサポートの提供を保証することはできません。この資料は情報提供のみを目的として提供されています。内容はお客様自身の責任でご利用ください。

プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Fisheye および Crucible は除く


このページで案内している手順は、Jira アプリケーションを MySQL データベースに移行 / インポートする方法を探していて (Postgres などの他のデータベースは使用できない)、データベースや絵文字をデータベースで保持することが必須要件であるお客様向けの回避策に留まる点にご注意ください。本番インスタンスへの変更の適用前に必要なテストや検証を行うことが非常に重要です。

When this workaround is in place, you will see the following error in the health check tool and it is safe to ignore. This health check result will be rectified once we have completed the improvement request here: JRASERVER-36135 - Getting issue details... STATUS


問題

"😊🍻" や特殊文字を入力すると、エラー メッセージが表示される。

場合によっては、一時的な問題が発生している旨の内部サーバー エラーが表示される。

また、atlassian-jira.log には次の内容が表示される。

2018-06-20 10:32:39,741 http-nio-9764-exec-25 ERROR admin 632x202x1 1xnpcwm 0:0:0:0:0:0:0:1 /rest/api/2/issue/TEST-13/comment [c.a.j.rest.exception.ExceptionInterceptor] Returning internal server error in response
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:192)
	... 
Caused by: org.ofbiz.core.entity.GenericDataSourceException: SQL Exception while executing the following:INSERT INTO jiraaction (ID, issueid, AUTHOR, actiontype, actionlevel, rolelevel, actionbody, CREATED, UPDATEAUTHOR, UPDATED, actionnum) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (Incorrect string value: '\xF0\x9F\x98\x8A\x0D\x0A...' for column 'actionbody' at row 1)
	at org.ofbiz.core.entity.jdbc.SQLProcessor.executeUpdate(SQLProcessor.java:570)
	at org.ofbiz.core.entity.GenericDAO.singleInsert(GenericDAO.java:198)
	... 300 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A\x0D\x0A...' for column 'actionbody' at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
	at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
	at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
	at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
	at org.ofbiz.core.entity.jdbc.SQLProcessor.executeUpdate(SQLProcessor.java:562)
	... 301 more

これは、MySQL データベース インスタンスに接続された新しい Jira インスタンスに Jira の XML バックアップをインポートする場合にも発生する場合がありまsす。


診断

環境

Jira アプリケーションが、UTF8 照合順序を使用している MySQL データベース サーバーに接続されている。

原因

MySQL prior to version 5.7.x does not support 4 byte characters. Related improvement request:  JRASERVER-36135 - Getting issue details... STATUS

回避策

MySQL データベースをバージョン 5.7.x にアップグレードし、対応する文字セットを utf8 ではなく utf8mb4 に切り替えます。これを実現するには、次の手順を実行します。

公式の「サポート対象プラットフォーム」ドキュメントにあるように、MySQL バージョン 5.7.x は Jira バージョン 7.3 以降でのみサポートされる点にご注意ください。


  1. MySQL データベースを終了します。

    既存の Jira インストレーションがある場合、Jira アプリケーションを終了し、Jira データベース バックアップを生成してから次のステップに進みます。

  2. /etc/my.cnf などの MySQL 設定ファイルで、必要な構成設定を適用し、ファイルを更新します。

    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
  3. MySQL データベースを再起動し、次の SQL クエリを実行して変更を確認します。

    mysql> SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
    +--------------------------+--------------------+
    | Variable_name            | Value              |
    +--------------------------+--------------------+
    | character_set_client     | utf8mb4            |
    | character_set_connection | utf8mb4            |
    | character_set_database   | utf8mb4            |
    | character_set_filesystem | binary             |
    | character_set_results    | utf8mb4            |
    | character_set_server     | utf8mb4            |
    | character_set_system     | utf8               |
    | collation_connection     | utf8mb4_unicode_ci |
    | collation_database       | utf8mb4_unicode_ci |
    | collation_server         | utf8mb4_unicode_ci |
    +--------------------------+--------------------+
    10 rows in set (0.01 sec)
  4. 新しい文字セット utf8mb4 に基づく新しい Jira データベースを作成します。

    CREATE DATABASE jira CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

    既存の Jira インストレーションがある場合、文字セットと照合順序に対応するように、データベースと対応するテーブルを変更する必要があります。次の SQL を参考情報としてご利用ください。

    # For each database:
    ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    # For each table:
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    # For each column:
    ALTER TABLE table_name CHANGE column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

    上記の SQL クエリをコピーしてそのまま使うことはできません。ご利用のインスタンスに応じて、database_nametable_namecolumn_name、および column_type をそれぞれ置き換える必要があります。適切な文字セットおよび照合順序で Jira インスタンスを再デプロイしてからデータを再インポートすることが、潜在的な問題やミスを回避するもっとも迅速な回避策です。

    MySQL データベースの照合や文字セットを手動で修正する方法の詳細についてはリンク先の記事をご確認ください。

これにより、絵文字や特殊文字を、詳細説明、コメント、およびその他の任意のテキスト フィールドに挿入し、レンダリングすることができます。

既知の制限事項

アクティビティ ストリームなどのガジェットでは絵文字や特殊文字が適切にレンダリングされない場合があります。


最終更新日 2021 年 5 月 18 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.