初めまして、最近はもっぱらクラウドサービスに傾倒しているサカイです。

発端

RDSとは→AWSのRDBサービス

RDSにはいくつかデータベースエンジンがあり、その中のSQL Serverを使い、一時テーブルから実テーブルへのINSERT処理を行うクエリを実行したところ照合順序が一時テーブルと実テーブルで違うぞ!と怒られてしまった。

原因



一時テーブルはシステムデータベースのtempdbに作成されるため、作られる一時テーブルの照合順序はtempdbに引っ張られてしまいます。
※RDSはサーバーの照合順序がデフォルトで「SQL_Latin1~」なため、システムDB含め既定値がLatinになる

そして、実テーブルは「Japanese_CI_AS」で作成していたため、一時テーブルとの間でエラーが起きていたみたいです。

ちなみに、AzureならDBインスタンス作成する時に照合順序が指定出来ます。
AWSだと変更が出来ないので避けられない問題…。

解決

一時テーブルを作成する際に明示的に照合順序を指定する。

普段から日本語版SQL ServerやOSに触れていると言語を気にしませんが、クラウドサービスなど海外のサービスを使用する際は今回の照合順序含め、ローカライズにお気をつけ下さい。

TOP
TOP