Skip to content
戻る

SQLServerに日本語データをInsertすると文字化けする。

Published:  at  01:04

概要

タイトルまんまです。
SQLServerに日本語データをInsertすると文字化けして「??????」と言った風になります。
解決したのでメモ。

目次

環境

生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って使うんすよね…



前の記事
C# EntityFrameworkのCodeFirstでCRUD(Read)
次の記事
C# EntityFrameworkのCodeFirstでCRUD(Create)