如何制作不区分大小写的约束?

How to make case insensitive constraints?

如何对 varchar 设置不区分大小写的约束。因此,如果我插入相同的 dob 但名称位于 bobBob 的位置,它们将被视为重复项?

CREATE TABLE customer(
  name varchar(32) NOT NULL,
  dob date NOT NULL,
  
  CONSTRAINT test_uq UNIQUE (LOWER(name), dob)
);

INSERT INTO customer (name, dob) VALUES('bob', '01/01/2020'); // This would work
INSERT INTO customer (name, dob) VALUES('Bob', '01/01/2020'); // This would not work because its a duplicate even though it Bob and not bob

使用不区分大小写的排序规则定义列:

CREATE TABLE customer(
  name varchar(32) collate utf8_general_ci NOT NULL,
  dob date NOT NULL,
  unique (name, dob)
);

默认情况下 MySQL 不区分大小写,因此我假设您的服务器或数据库已将排序规则设置为区分大小写的排序规则。

Here 是一个 db<>fiddle.