- 締切済み
DBで大文字小文字を区別せずINSERTする方法
データベースに関する質問です。 現在、学校でデータベースを使用したシステムを開発しています。 データベースは主にPostgreSQLを使用しています。 データをINSERTする際に大文字小文字を区別せず、 同じ文字列であるかどうかチェックする方法はありますか? たとえば、「abc123」と「aBc123」を同一とみなし INSERTできないようにしたいです。(主キーのため) システム側ではなく、できればデータベース側で判定を行いたいです。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mino-motsu
- ベストアンサー率100% (1/1)
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/contrib.html
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
データベース側では出来ないので、事前にlower(小文字化)関数かupper(大文字化)関数を使って、selectして無い事を確認してからinsertして下さい。
- mk48a
- ベストアンサー率56% (1133/2007)
INSERT INTO INTO sample(id) VALUES ('aBc123') WHERE NOT EXISTS (SELECT * FROM sample WHERE id=lower('aBc123')); うろ覚えですが、lower()とEXISTSを使えばできるのではないかと思います。