Studio(以下、SSMS)で扱う文字コードについてはあまり情報がない。ストアドプロシージャ等のデータベースへ格納されるオブジェクトについては、エンコードの違いでSQLファイルへ出力した際に文字化けしてしまう。変わったっぽい??ので解説していく。2012で既定のインストールされたインスタンスの例だと、文字コードはShift-JISになっている。ストアド、ファンクションはデータベース上にShift-JISで保存されており、SSMSでもShift-JISで出力や更新を行っているっぽい。このあたりは、照合順序にも影響されるとの情報があるが、既定ではJapanese_CI_ASになっていた。2014こちらも都合上具体例は出せないが、既定の状態でインストールするとJapanese_CI_ASとなるが、ストアド、ファンクションはUTF-8で保存されている模様。SSMSもファイル出力、更新はUTF-8で処理しているみたい。クエリエディターへの出力では文字化けせず正しく出せている。2014からは、既定のエンコードはUTF-8に統一されたと思われる。付属のSSMSどちらも互換がありデータベース接続そのものは問題なくできる。違うバージョンのデータベースに接続して、ファイル出力や更新をした場合には、エンコードの違いが生まれてしまう模様。2012のデータベースへ接続してストアドを作成すると、UTF-8で作成されているようだ。問題となったことsqlcmdを使ってコマンドプロンプトからSQLファイルでストアドの更新をかけた場合に、盛大に文字コードの影響を受け、コメントの日本語が文字化けするようになってしまった。2014への更新をかけている。2012はあまり関係ないが、今まではこんなことなかったよなー?と思った)もちろん、SQLファイルをShift-JISに変換すれば問題ないが、繰り返し作業で使うのでオペミスを減らすためにもそのまま使いたい。あと、UTF-8をBOM付きにすれば問題なかった。整理するとSSMSを使っている分には正しく表示出来ているので、問題を切り分けると、SSMSでの出力がUTF-8になるsqlcmdで実行すると文字化け実行になるこの2点だなと整理できてきた。UTF-8にしても結果は変わらなかった。(使い方が悪いのかな??)とりあえずSSMSの設定を見てるけど、BOM警告の設定はあるけど、出力そのものの設定は見当たらない。sqlcmdのオプションを調べたら、案の定、入力/出力それぞれのエンコード指定があった。i:65001を入れてあげれば、UTF-8として実行されるようになる。この変更って...sqlcmdとか使ってなければ問題なさそうだけど、大人数のチームで開発しててSSMSのバージョンが違った場合って、エンコードがぐっちゃぐちゃになる可能性を秘めてるってことだよねー。1日目に参加!色々なご縁もあって、de:codeに参加することができた。読者になる月別アーカイブ検索ランキングにほんブログ村インターネット・コンピュータランキングスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。