2011-01-29 8 views
7

私はmysqlとpostgresqlの両方で動作する必要があるアプリケーションを作成しています。 いくつかの値を比較するにはlikeを使用する必要があります。SQL 'LIKE'構文

mysql LIKEでは大文字と小文字を区別しません。 postgresql LIKEでは大文字と小文字が区別され、ILIKEでは大文字と小文字が区別されません。

マッチで大文字と小文字を区別する必要がある場合に、両方で動作する確実なクエリを作成する最良の方法は何ですか?

PDOにはこれに対する解決策がありますか?

答えて

9

大文字と小文字を区別しないLIKEを確保するための最も簡単な方法は、これらのいずれかのようなものを使用することです:

LOWER(column_name) LIKE LOWER(pattern) 
UPPER(column_name) LIKE UPPER(pattern) 

それとも/ダウンケースSQL外pattern、ちょうどアップの場合は使用することができます。

LOWER(column_name) LIKE down_cased_pattern 
UPPER(column_name) LIKE up_cased_pattern 

小文字は読みやすく、デバッグしやすいので、私はLOWERという傾向があります。

+4

"Q:すべてのスクリプトに大文字と小文字を使用していますか?A:いいえ、ほとんどのスクリプトには大文字と小文字がありません。 (Unicode FAQから)一般的には、小文字を大文字にすることはできません。また、大文字の小文字を1つの大文字にマップすることはできません。大文字のうちのいくつかはUPPER()から2つの文字にマッピングされます。だからlower()はより安全ですが、ちょっとだけです。あなたはユニコードの世界に住んでいるのが好きですか? –

+1

@Catcall:2つの大文字にマップする単一の小文字の良い例は、エキゾチックなドイツ語に由来します: 'UPPER("ß ")'は '' SS '''です。 I18NとL10Nはとても楽しい時間です!特に、JIS、SJIS、EUC、Unicodeの日本語を日本語で読むことができなくても同時に扱っている時(そこにいたことがありましたが、最近はUTF-8がかなり標準的です) –

3

これはDatabase Abstraction Layerのジョブです。

PDO does notあなたが探しているものはありますが、google for themの場合はPHP DALがいくつかあります。

PDOはデータベースを提供しません。 抽象化。 SQLを書き換えたり、欠けている機能をエミュレートする はありません。 その施設が必要な場合は、本格的な抽象レイヤーを使用する必要があります。