Open7
SQL Serverの横棒記号の取扱
SQL Serverの横棒記号の取扱 #SQLServer - Qiita と同様に、ハイフンとかマイナスとかダッシュとか | 404 motivation not found で紹介さされている横棒記号が、SQL Server において、どの記号どうしが同一視されるか調べる。
調査方法
Docker で SQL Server コンテナを立ち上げ、以下のSQLを実行。
CREATE TABLE [dbo].[yokobo](
[symbol] [nvarchar](100) NOT NULL,
[yomi] [nvarchar](100) NOT NULL
)
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'-', N'全角ハイフンマイナス');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'-', N'半角ハイフンマイナス');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'‐', N'全角ハイフン');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'−', N'全角マイナス');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'‒', N'フィギュアダッシュ');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'—', N'全角ダッシュ(emダッシュ)');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'–', N'二分ダッシュ(enダッシュ)');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'―', N'ホリゾンタルバー');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'ー', N'全角長音');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'ー', N'半角長音');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'─', N'罫線(ライト)');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'━', N'罫線(ヘビー)');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'ㅡ', N'ウ(ハングルの字母)');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'ـ', N'カシーダ');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'⁻', N'上付きマイナス');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'₋', N'下付きマイナス');
INSERT INTO [dbo].[yokobo] (symbol, yomi) VALUES (N'一', N'いち');
文字列の先頭にNをつけないと文字化けする。
参考:SQLServerに日本語データをInsertすると文字化けする。 - lycheejam's tech log
1つずつ調べていく。こちらもNをつけ忘れずに。
SELECT * FROM yokobo WHERE symbol = N'-'
結果
以下のグループのみが同一視され、他の記号どうしは同一視されなかった。
- (1)
- -(全角ハイフンマイナス)
- -(半角ハイフンマイナス)
- (2)
- ー(全角長音)
- ー(半角長音)
横棒記号の判別には Unicode(ユニコード)とURLエンコード検索と変換サイト 0g0.org が使える。
SQL Serverの横棒記号の取扱 #SQLServer - Qiita との違い
- 「-(全角マイナス) 」は正しくは「全角ハイフン/マイナス」。「全角マイナス」は「−」。
- 「―(全角ダッシュ)」は「ホリゾンタルバー」とも言う。「全角ダッシュ(em ダッシュ)」は「—」であり、欧文用。
- 自分が調べた結果だと、 「―(ホリゾンタルバー)」≠ 「ー(全角長音)」 = 「ー(半角長音)」だった。
- ただし、ユニーク制約においては、「―(ホリゾンタルバー)」=「ー(全角長音)」 = 「ー(半角長音)」が同一視された(謎)。
N無しの結果
DDL およびクエリで、文字化け回避のための N 無しで試した結果は以下。
- 以下は挿入時に「-(半角ハイフンマイナス)」に変換されてしまう。それ以外は文字化け。
- 「-(全角ハイフンマイナス)」
- 「-(半角ハイフンマイナス)」
- 「‐(全角ハイフン)」
- 「−(全角マイナス)」
- 「─(罫線(ライト))」
- また、上記のみが同じ記号として扱われ、どのみち、 SQL Serverの横棒記号の取扱 #SQLServer - Qiita とは異なる結果になった。