概要
タイトルまんまです。
SQLServerに日本語データをInsertすると文字化けして「??????」と言った風になります。
解決したのでメモ。
目次
環境
- Windows 10 Pro Ver 1709
- Microsoft SQL Server Express Edition (64-bit) (SQL Server Data Tools 15.1.61804.210)
- A5:SQL Mk2 Version 2.12.3 (64bit)
生SQLでInsert
文字化けした
普段、LINQ to EntitiesでデータのCRUDをやってる感じなんですが
生のSQL文でInsertしたくなったのでやってみたら文字化けしました。
件の文字化けSQLと実際のデータは下記の通り。
INSERT INTO EscortFlotillas(EscortFlotillaName)
VALUES ('第1護衛隊群'), ('第2護衛隊群'), ('第3護衛隊群'), ('第4護衛隊群'), ('地方配備部隊');

A5:SQLの設定が悪いのかと疑って設定から文字エンコード方式がS_JISになっていたのでUTF-8に変更して再度実行したが結果は変わらず…
とりあえずググる。
文字化け解決
文字化けはSQL Serverと通信する際に非Unicode文字からUnicode文字に変換しているためにS_JISの文字コードでUnicodeを参照しているから発生しているようだ。
日本語文字データの先頭にNをつけることで解決した。
正しくはNプレフィックスと言うらしい。
INSERT INTO EscortFlotillas(EscortFlotillaName)
VALUES (N'第1護衛隊群'), (N'第2護衛隊群'), (N'第3護衛隊群'), (N'第4護衛隊群'), (N'地方配備部隊');

あれ?おかしいな、A5:SQLの文字コード設定をUTF-8に変えたのだけど
SQL Server内の処理で変換が発生しているのか
A5:SQLの文字コードって読み取り用ってことになるのかな?
調べていくとnvarcharなどn付きデータ型は上記のようにしないといけないようだ。

参考サイト様
雑感
先頭にNつけるとかCOBOLかよwwwwって思った。
COBOLも項目に日本語使うときはNって使うんすよね…