プログラマ38の日記

主にプログラムメモです。

Salesforce: SOQLの検索条件で、半角全角の区別ではまったこと

SOQLで検索条件は、半角全角の区別ではまりました。
何ではまったかというと、検索条件で指定したのは半角なのに、検索結果に全角も含まれていたからです。

 

はまった経緯は次です。

  • 半角の"x01"と全角の"x01"は分けてコード登録を行います。
  • Apex処理内でコードを使って別のデータとのひもづけを行う処理を作ろうとしました。

 

はまった結果は次です。

  • Apex内で半角の"x01"にひもづけてレコードを作成しようとして、半角の"x01"を検索条件としてSOQLを実行しました。ですが、その結果に、全角の"x01"も含まれていて、本来であればひもづけは不要な全角の"x01"にもレコードをひもづけてしまいました。

 

Salesforceでの半角全角・大文字小文字の区別

f:id:crmprogrammer38:20170728084239p:plain

ユニーク項目で、上記の「大文字と小文字を区別する」にすると、大文字小文字は区別されてますが、半角・全角の区別はありません。

※ただし、半角カナと全角カナは異なる文字として扱われます。

逆にいうとユニーク項目でない場合や、ユニーク項目でも上記の「大文字と小文字を区別しない」にチェックしていると、半角全角と大文字小文字が区別されません。

 

どう対処するか

  1. SOQLで検索結果に対して再度、指定した条件でフィルタする処理を作る。(Apexでの文字の比較は半角全角・大文字小文字は区別します)
  2. もしくはSalesforce以外で、要件を満たす半角全角・大文字小文字の区別ができるデータベースなどを用意してそちらの処理結果をSalesforceに登録する。

2での対策は、Salesforce以外にもサーバが必要とし、余計面倒ですので、1の検索結果にさらにフィルタする処理を作るのが現実的と思います。

 

Salesforceでキーとして扱う項目は、半角大文字で統一するなどルールを決めておくのが一番かなと思いました。