閲覧ありがとうございます。Armadaです。
今回はSalesforceネタです。
クライアントアプリからSalesfoceにデータを登録する際、キー重複を避けるために事前にSOQL(Salesforce独自のクエリ言語)でデータを抽出→重複キーの存在チェックという流れでアプリ側でチェックを行うわけですが、ここで全角/半角問題が出てきます。
どんな問題かというと、文字によってSOQLとデータ登録時では全角/半角の区別が異なるため、SOQLでは重複なしとなってもデータ登録時に重複ありでエラーとなるのです。
文字による全角/半角の扱いをまとめると以下のとおりです。
文字 | SOQL | 登録時 |
アルファベット | 区別なし | 区別なし |
数字 | 区別なし | 区別なし |
カタカナ | 区別あり | 区別なし |
記号 ※文字により異なる |
区別なし | 区別なし |
アルファベット、数字は全て同じで「区別なし」、カタカナはSOQLでは「区別あり」、登録時は「区別なし」となります。
記号は、というと文字によって異なります。
基本的には上記の表のとおりですが、一部の記号は区別ありだったり、なしだったり。
扱いが異なる記号について調査した結果は以下のとおりでした。
文字コード | 記号 | SOQL | 登録時 |
0x22 | “ | 区別あり | 区別あり |
0x27 | ‘ | 区別なし | 区別あり |
0x5c | \ | 区別あり | 区別あり |
0x5e | ^ | 区別あり | 区別なし |
0x60 | ` | 区別なし | 区別あり |
0x7e | ~ | 区別あり | 区別なし |
0xa1 | 。 | 区別あり | 区別なし |
0xa2 | 「 | 区別あり | 区別なし |
0xa3 | 」 | 区別あり | 区別なし |
0xa4 | 、 | 区別あり | 区別なし |
0xa5 | ・ | 区別あり | 区別なし |
0xb0 | ー | 区別あり | 区別なし |
0xde | ゙ | 区別あり | 区別あり |
0xdf | ゚ | 区別あり | 区別なし |
これらの記号やカタカナは基本的にキー項目の値としては利用しないため、登録時の入力チェックでエラーとするなど、登録しない仕組みを考えた方が良さそうです。
是非、参考にしてください。