• 締切済み

DBで大文字小文字を区別せずINSERTする方法

データベースに関する質問です。 現在、学校でデータベースを使用したシステムを開発しています。 データベースは主にPostgreSQLを使用しています。 データをINSERTする際に大文字小文字を区別せず、 同じ文字列であるかどうかチェックする方法はありますか? たとえば、「abc123」と「aBc123」を同一とみなし INSERTできないようにしたいです。(主キーのため) システム側ではなく、できればデータベース側で判定を行いたいです。 宜しくお願い致します。

みんなの回答

回答No.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/contrib.html

参考URL:
https://www.postgresql.jp/document/9.3/html/citext.html
回答No.2

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

  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

INSERT INTO INTO sample(id) VALUES ('aBc123') WHERE NOT EXISTS (SELECT * FROM sample WHERE id=lower('aBc123')); うろ覚えですが、lower()とEXISTSを使えばできるのではないかと思います。

関連するQ&A