如何在SQLite中创建不区分大小写的唯一列

时间:2014-01-04 00:01:04

标签: sqlite pdo

我一直无法找到答案。我正在尝试使用唯一的电子邮件地址列创建一个表。当我做的时候

CREATE TABLE users (
  email TEXT PRIMARY KEY,
  password TEXT NOT NULL CHECK(password<>''),
  UNIQUE (lower(email))
)

使用PDO时,我收到错误:

  

致命错误:未捕获异常'PDOException',消息'SQLSTATE [HY000]:常规错误:1附近“(”:script.php中的语法错误:65堆栈跟踪:#0 script.php(65):PDO - &gt; exec('CREATE TABLE us ...')在第65行的script.php中抛出#1 {main}

第65行是CREATE TABLE行。如果我拿出UNIQUE,它就可以了。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:7)

COLLATE NOCASE是你的朋友:

CREATE TABLE users (
  email TEXT PRIMARY KEY,
  password TEXT NOT NULL CHECK(password<>''),
  UNIQUE (email COLLATE NOCASE)
)

答案 1 :(得分:2)

对于速度,首先输入所有输入小写,然后使用普通的唯一列。

这对于read-more-frequency-than-write用例非常有用,因为查询只需要比较字符串,而不是首先转换字段,它必须多次进行比较。