Skip to main content

 

 

 

 
Language:

 

 

 

 
 
OutSystems

SQL Serverで実行されるOutSystemsデータベースの照合順序を変更する

はじめに

SQL Serverをデータベースバックエンドとして使用してOutSystemsプラットフォームをオンプレミスでインストールすると、データベースの照合順序の使用に関する選択が行われます。

照合順序は、いくつかのレベル(データベースインスタンスレベル、データベースレベル、個別の列レベル)で実行されます。OutSystemsプラットフォームは、大文字と小文字を区別せずにインストールされている場合にのみ、インストールまたはSQL Serverデータベースとの連携が認められています。つまり、以下のようになります。

  • データベースインスタンスの照合順序は、大文字と小文字を区別しないようになっている必要があります(例: Latin1_General_CI_AS)。

  • データベースの照合順序も、大文字と小文字を区別しないようになっている必要があります(例: Latin1_General_CI_AI)。

列の照合順序は、データベースの照合順序から継承されます。

インスタンスとデータベースの照合順序は、上記の例のように異なる場合があります。ただし、どちらも大文字と小文字を区別しない(CI)ようになっている必要があります。

照合順序は、OutSystemsインフラのすべての環境間で一貫している必要があります。つまり、Development、Quality、Pre-Production、Productionなどでは同じ照合順序になっている必要があります。照合順序がすべての環境で同じでないと、アプリケーションは国際的なサポートに関して動作が異なる場合がまれにあります。

照合順序の競合と変更のニーズ

大文字/小文字やアクセントの区別に加えて、その他のプロパティでも照合順序を定義します(言語、バージョンなど)。照合順序の詳細については、Microsoftのドキュメントをご覧ください。

SQL Serverには多数の照合順序があります。照合順序が一致していない場合、SQL Serverは照合順序を適切に処理できません。具体的には、以下の処理を実行しようとするとエラーが発生します。

  • 照合順序の異なる列を使用してクエリで結合条件を作成する。

  • 異なる照合順序を使用している列間で外部キーを作成する。

これは、アプリケーション開発時の問題につながるおそれがあります。最初の例については、SQL Serverの特別な句(COLLATE)を使用することで、こうした状況に対処できます。ただし、高度なクエリ/SQLノード、Aggregate以外/単純なクエリを使用する必要があります。2番目の例については、回避策はありません。

つまり、今後の連携ニーズを考慮したうえで照合順序の選択を慎重に検討する必要があります(特に、プラットフォームの外部にあるデータモデルを結合する必要がある場合)。

照合順序の変更

プラットフォームをインストールした直後に、誤った照合順序でインストールしたことに気付いた場合は、「最初に戻る」ことが最も簡単なアプローチです。つまり、データベースをゼロから作成し直してからプラットフォームを設定し、開発を開始します。

ただし、環境を一定期間使用していた後に気付いた場合は、少し難しくなります。

既存のデータベースの照合順序を修正するのは容易ではありません。

データベースの照合順序を変更するだけでは、問題は解決しません。それどころか別の問題が発生してしまいます。

データベース(カタログ)の照合順序はクリック1つで変更できますが、そのように変更しても既存の列は変更されません。それらの列は作成された時点で照合順序が設定されており、データベースの照合順序を変更した後もその照合順序が保持されます。

そのため、データベースの照合順序を変更しただけの場合は、既存のオブジェクトで古い照合順序を使用し、これから作成する新しいオブジェクトで新しい照合順序を使用することになるため、アプリケーションの今後の開発で競合が発生してしまう、という問題が発生します。

実現可能性

SQL Serverデータベースの照合順序は変更できます。ただし、ある程度複雑でリスクがあり、環境を一定期間停止する必要があります。

データベースの照合順序の変更に関する支援はOutSystems Supportの範囲外です。つまり、これはデータベースレベルのタスクであり、インフラの大幅な変更に関する必要なテスト手順に従って適切な専門家が実施する必要があります。

こうしたタスクの実施に関するOutSystems Supportの支援についてはご期待に応えることはできません。

この変更に対する一般的なアプローチには、列、デフォルトの制約、インデックスといったオブジェクトの照合順序の変更を実行するスクリプトなどがあります。

こうしたアプローチを検討する際には、以下のリンクが役立つ場合があります。

データベースに関わる操作と同様に、バックアップの実行、手順の十分なテスト、アプリケーションのテスト、ロールバックの計画など、適切な注意が必要であることに留意してください。

こうした変更を適切に行わないと、実行時またはアプリケーションのデプロイ時にエラーが発生するおそれがあります。エラーには、以下のような内容のメッセージが含まれます。

Cannot resolve the collation conflict between

"SQL_Latin1_General_CP1_CI_AI*" and "*Latin1_General_CI_AI"

適用対象

OutSystemsプラットフォーム、.NET / SQL Server。

すべてのバージョン(最終確認は9.1.600.0)に適用されます。

  • Was this article helpful?