プロが教える店舗&オフィスのセキュリティ対策術

データベースに関する質問です。
現在、学校でデータベースを使用したシステムを開発しています。
データベースは主にPostgreSQLを使用しています。

データをINSERTする際に大文字小文字を区別せず、
同じ文字列であるかどうかチェックする方法はありますか?
たとえば、「abc123」と「aBc123」を同一とみなし
INSERTできないようにしたいです。(主キーのため)

システム側ではなく、できればデータベース側で判定を行いたいです。
宜しくお願い致します。

A 回答 (3件)

PostgreSQL 8.4以降であれば、contribモジュールのcitext型を使うと、大文字小文字の区別のない主キーを定義できます。



【例】
test=# CREATE EXTENSION citext ;
CREATE EXTENSION
test=# CREATE TABLE ci_sample (key citext PRIMARY KEY, value text);
CREATE TABLE
test=# INSERT INTO ci_sample VALUES ('abc', 'foobar');
INSERT 0 1
test=# INSERT INTO ci_sample VALUES ('abC', 'foobar');
ERROR: duplicate key value violates unique constraint "ci_sample_pkey"
DETAIL: Key (key)=(abC) already exists.

PostgreSQLが9.1よりも古い場合は、CREATE EXTENSIONの代わりにSQLスクリプトを実行する必要があります。

【参考】
https://www.postgresql.jp/document/9.0/html/cont …

参考URL:https://www.postgresql.jp/document/9.3/html/cite …
    • good
    • 0

データベース側では出来ないので、事前にlower(小文字化)関数かupper(大文字化)関数を使って、selectして無い事を確認してからinsertして下さい。

    • good
    • 0

INSERT INTO INTO sample(id)


VALUES ('aBc123')
WHERE NOT EXISTS (SELECT * FROM sample WHERE id=lower('aBc123'));

うろ覚えですが、lower()とEXISTSを使えばできるのではないかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!