SQLiteの文字列比較における大文字小文字の問題の解決法
2022-01-10 03:44:30
ほとんどのデータベースは、文字列比較を行う際に大文字と小文字を区別しません。しかし、最近SQLiteを使ってみて、全く逆であることがわかりました。
テーブルUserが次のような構造と値を持っているとする。
<テーブル ユーザー名 1 ユーザー1
以下のSQL文を実行します。
コピーコード
コードは以下の通りです。
SELECT * FROM [User] WHERE UserName = 'user1'
結果は、レコードが見つかりませんでした。どうやら、SQLiteは文字列比較を行う際、デフォルトで大文字と小文字を区別するようです。これはアプリケーションに悪い影響を与える可能性があります。例えば、ユーザーはユーザー名を厳密に大文字で入力しなければなりませんが、これはユーザーにとって悪い経験です。ユーザーテーブルにはuserとUSERの両方が存在する可能性があり、混乱させる可能性があります。
SQLiteは近年登場したデータベースなので、中国語の情報が少なく、英語のソースをググって、ようやく3つの解決策を見つけました。
解決策1:大文字小文字変換関数LOWER, UPPERを使う。
コピーコード
コードは以下の通りです。
SELECT * FROM [User] WHERE LOWER(UserName) = 'user1'
オプション2:比較の際に大文字と小文字を区別しない宣言を強制する
コピーコード
コードは以下の通りです。
SELECT * FROM [User] WHERE UserName = 'user1' COLLATE NOCASE
オプション3: テーブル作成時に大文字と小文字を区別しないフィールドを宣言する
コピーコード
コードは以下の通りです。
CREATE TABLE [User] ( [UserName] NVARCHAR(20) COLLATE NOCASE );
大文字小文字を区別する必要がない場合は、オプション 3 が最適です。大文字小文字を区別しないクエリが少数しかない場合は、オプション 2 を使用することができます。一方、オプション 1 は、関数の使用によりさらにパフォーマンスが低下する可能性があり、推奨されません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQLite の if not exist ライクな関数の実装
-
よく使われるsQliteステートメントとsQliteデベロッパーの使用・登録について
-
ubuntuでSQLite3を使うための基本コマンド
-
SQLiteデータベースのインストールと基本操作ガイド
-
SQLITE3データベースを初めて知る
-
SQLite3 用に ANSI から UTF8 への交換関数を提供する。
-
SQLiteチュートリアル(6)。式の説明
-
SQLiteチュートリアル(I)。SQLiteデータベース入門
-
SQLiteチュートリアル(II)。C/C++インターフェイスの紹介
-
SQLiteチュートリアル(V): インデックス作成とデータ解析・クリーニング