MySQL でカラムとテーブルの照合を utf8_bin に変更する

お困りですか?

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

コミュニティに質問

プラットフォームについて: 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 は除く

問題

この記事では、データベース内のカラムとテーブルの両方で、サポート対象の照合 utf8_bin を更新する手順をご紹介します。

診断

次のクエリを使い、推奨される utf8_bin とは異なる照合を持つ、データベース、データベース テーブル、およびデータベース カラムを見つけます。返されたものを次のステップのために記録します。

SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA S WHERE schema_name = '<database-name>' AND DEFAULT_COLLATION_NAME != 'utf8_bin';
SELECT * FROM information_schema.COLUMNS WHERE table_schema = '<database-name>' AND collation_name != 'utf8_bin';
SELECT * FROM information_schema.TABLES WHERE table_schema = '<database-name>' AND table_collation != 'utf8_bin';

<database-name> は、ご利用の Jira アプリケーション インスタンスで利用されているデータベースの名前で置き換えます。


ソリューション

データベースの変更を行う場合は 必ず事前にバックアップを取得してください。可能な場合はテスト サーバーで変更を試すことをおすすめします。

  1. Jira アプリケーションを停止します。
  2. アプリケーション データベースで次のクエリを実行してデータベースのデフォルト照合を変更します。

    ALTER DATABASE <database-name> CHARACTER SET utf8 COLLATE utf8_bin;

    <database-name> は、ご利用の Jira アプリケーション インスタンスで利用されているデータベースの名前で置き換えます。

  3. MySQL の制約チェックを無効化します。これを行わないとテーブルの変更を行えません。

    SET foreign_key_checks = 0;
  4. 次のクエリを利用してテーブルの照合を変更します。

    ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

    <table-name> は、診断セクションの 2 つめのクエリで返されたテーブルの名前で置き換えます。


    • 上記に失敗する場合は代わりに次のものを利用します。

       ALTER TABLE <table-name> CHARACTER SET utf8 COLLATE utf8_bin;

    診断ステップで実行された、誤った照合が設定されたテーブル用のクエリで複数の結果が返される場合、次のステップを行い、影響を受けるすべてのテーブル用の一連のクエリをファイルに生成できます。以降は UNIX プラットフォーム専用の例です。

    ここをクリックして展開...

    1.  ALTER TABLE クエリを含むファイルを生成します。

    SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;') 
    INTO OUTFILE '/tmp/alterstatements.sql' FROM information_schema.tables 
    WHERE table_schema='<database-name>' 
    AND table_collation != 'utf8_bin' 
    GROUP BY table_name;

    2. 出力されたファイルが正しいかどうかを確認します。

    cat /tmp/alterstatements.sql

    3. 現在のデータベースに対して SQL ファイルを実行します。

    mysql my_jira_db < /tmp/alterstatements.sql
  5. 影響を受けるすべてのテーブルに対してクエリを実行したら、次のクエリで結果が返されなくなっていることを確認します。

    SELECT * FROM information_schema.COLUMNS WHERE table_schema = '<database-name>' AND collation_name != 'utf8_bin';
    SELECT * FROM information_schema.TABLES WHERE table_schema = '<database-name>' AND table_collation != 'utf8_bin';
  6. 上記のクエリで何らかの結果が返される場合、返されるテーブルを記録し、テーブルのデフォルト照合を定義する次のクエリを実行します。

    ALTER TABLE <table-name> DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
  7. 次のクエリで、MySQL の外部キーの制約チェックを元に戻します。

    SET foreign_key_checks = 1;
    説明 この記事では、データベース内のカラムとテーブルの両方で、サポート対象の照合 utf8_bin を更新する手順をご紹介します。
    製品Jira
    プラットフォームServer
最終更新日: 2023 年 1 月 11 日

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

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