会社行きたくなかったんです。

自由になりたくて会社辞めました

Azure クラウド

Azure SQL Databaseで日本語が文字化けしてしまいました。

投稿日:

Azure SQL Databaseで日本語が文字化けしてしまいました。
新規データベースと作って、ローカルデータを長時間かけてコピーしたのに…。

照合順序の設定をし忘れました。
現在の照合順序を確認するために、以下のSQLを実行しました。

SELECT CONVERT (varchar, SERVERPROPERTY('collation'))

結果は、「SQL_Latin1_General_CP1_CI_AS」でした。

スポンサーリンク

他の文字化けしていないデータベースで同じように確認してみたところ「SQL_Latin1_General_CP1_CI_AS」となっています。
Nプレフィックスを使っているわけでもないのに、文字化けしていません。

SQL Azureの場合、オンプレミスの場合と違い、ALTER DATABASE で COLLATE 句を使用することで作成後に照合順序を変更することができません。
「Japanese_CI_AS」を指定して新たにデータベースを作ったら、文字化けしなくなりました。
ただ、「SELECT CONVERT (varchar, SERVERPROPERTY('collation'))」の結果は「SQL_Latin1_General_CP1_CI_AS」です。

どうやら照合順序の確認方法が間違っているようです。

select * from sys.databases

でcollation_nameを確認するのが正しいSQL Azureの照合順序の確認方法のようです。
文字化けしないデータベースは、全部collation_nameが「Japanese_CI_AS」になっていました。
SQL Azureにデータベース作成なんて、たまにしかしないから設定間違えていたようです。
collation_nameを更新できるか試してみました。

update sys.databases set collation_name = 'Japanese_CI_AS' where name = '[DB名]'

エラーが発生します。

Ad hoc updates to system catalogs are not allowed.

システムテーブルを直接更新することはできないようです。
仕方ないので、データベースの作り直しします。
ローカルデータのコピーも20時間かかったので、バルクインサートでやるように変更します。

-Azure, クラウド

Copyright© 自由になりたくて会社辞めました , 2019 AllRights Reserved Powered by AFFINGER4.