トップ回答者
SQL Serverで濁点の違う文字が同じと扱われる

-
お世話になります。
SQLServerで濁点のある文字「ブ」と「フ゛」が同じ文字として扱われるため、
主キーとなる項目に挿入できず困っています。
Windowsのパスを格納するテーブルがあり、パスを主キーにしています。
ファイル名では「ブ」と「フ゛」は別物として扱われるため、DB上も別レコードとして登録したいのですが、
一意制約違反となり登録できません。
照合順序を変えてみたりしたのですが、解決できていません。
主キーを別の項目にすると良いのですが、既に稼働中のシステムのため、変更が難しい状況です。
そもそも無理な事をやろうとしている(仕様バグ)のか、何か対処法があるのか、
ご存知の方いらっしゃいましたらご教示願えないでしょうか。
[環境]
SQLServer2014 SP2
照合順序:Japanese_XJIS_100_CI_AS_KS_WS
質問
回答
-
> 照合順序を変えてみたりしたのですが、解決できていません。
照合順序を Japanese_BIN2 にしたらどうなりますか?
> ファイル名では「ブ」と「フ゛」は別物として扱われるため、DB上も別レコードとして登録したいのですが、一意制約違反となり登録できません。
照合順序 Japanese_XJIS_100_CI_AS_KS_WS では多分「ブ」と「フ゛」は同じとして扱われていると思います。
詳しくは以下の記事を見てください。
日本語照合順序での 濁音、半濁音 の取り扱いについて
https://blogs.msdn.microsoft.com/jpsql/2014/12/11/2353/記事では、日本語照合順序では「『"半角文字" + "濁音、半濁音"』が 1 文字として認識されます」とありますが、全角文字「ブ」と「フ゛」も同じ扱い、多分濁点がない「フ」と同じになると思われます。
- 回答としてマーク rassy256 2018年4月10日 0:40
すべての返信
-
> 照合順序を変えてみたりしたのですが、解決できていません。
照合順序を Japanese_BIN2 にしたらどうなりますか?
> ファイル名では「ブ」と「フ゛」は別物として扱われるため、DB上も別レコードとして登録したいのですが、一意制約違反となり登録できません。
照合順序 Japanese_XJIS_100_CI_AS_KS_WS では多分「ブ」と「フ゛」は同じとして扱われていると思います。
詳しくは以下の記事を見てください。
日本語照合順序での 濁音、半濁音 の取り扱いについて
https://blogs.msdn.microsoft.com/jpsql/2014/12/11/2353/記事では、日本語照合順序では「『"半角文字" + "濁音、半濁音"』が 1 文字として認識されます」とありますが、全角文字「ブ」と「フ゛」も同じ扱い、多分濁点がない「フ」と同じになると思われます。
- 回答としてマーク rassy256 2018年4月10日 0:40
-
照合順序を変えてみたりしたのですが、解決できていません。
以下に書かれているように、インデックスがある列などは照合順序を変更することができません。よって、データベースの照合順序を変更しても、主キーの列は照合順序が変わっていないのでしょう。
列の照合順序の設定と変更
https://technet.microsoft.com/ja-jp/library/ms190920(v=sql.105).aspxおそらく主キーがある列の照合順序だけ変えれば良いと思われますので、上記の記事に従って、主キーの列の照合順序を再度変更してみて下さい。その際、一度主キーの設定を外すなど、どこからも参照されていない状態にしなければ変更することができません。
照合順序の変更が終わりましたら、再度、主キー等の設定を行って下さい。
上記の手順でうまく行くはずですが、作業前に念のためにデータベースのバックアップを取って下さい。★良い回答には質問者は回答済みマークを、閲覧者は投票を!
-
データベースだけでなくインスタンスの照合順序を変更したところ「ブ」と「フ゛」を区別して登録出来ました!
う~ん、そこまでする必要はなかったと思いますが、それで問題ないのであればそれでも良いと思います。
ただ、私が上に書いたことは今後のために頭の隅にでも入れておかれると良いと思います。
★良い回答には質問者は回答済みマークを、閲覧者は投票を!
- 編集済み trapemiyaMVP 2018年4月10日 1:03 誤字訂正
-