概要
タイトルまんまです。
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って使うんすよね…