MySQL でカラムとテーブルの照合を utf8_bin に変更する
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Server* 製品のサポートは 2024 年 2 月 15 日をもって終了します。Server 製品を利用している場合は、Atlassian Server のサポート終了のお知らせページにて移行オプションをご確認ください。
*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 アプリケーション インスタンスで利用されているデータベースの名前で置き換えます。
ソリューション
データベースの変更を行う場合は 必ず事前にバックアップを取得してください。可能な場合はテスト サーバーで変更を試すことをおすすめします。
- Jira アプリケーションを停止します。
アプリケーション データベースで次のクエリを実行してデータベースのデフォルト照合を変更します。
ALTER DATABASE <database-name> CHARACTER SET utf8 COLLATE utf8_bin;
<database-name>
は、ご利用の Jira アプリケーション インスタンスで利用されているデータベースの名前で置き換えます。MySQL の制約チェックを無効化します。これを行わないとテーブルの変更を行えません。
SET foreign_key_checks = 0;
次のクエリを利用してテーブルの照合を変更します。
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 プラットフォーム専用の例です。
影響を受けるすべてのテーブルに対してクエリを実行したら、次のクエリで結果が返されなくなっていることを確認します。
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';
上記のクエリで何らかの結果が返される場合、返されるテーブルを記録し、テーブルのデフォルト照合を定義する次のクエリを実行します。
ALTER TABLE <table-name> DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
次のクエリで、MySQL の外部キーの制約チェックを元に戻します。
SET foreign_key_checks = 1;