我一直无法找到答案。我正在尝试使用唯一的电子邮件地址列创建一个表。当我做的时候
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
,它就可以了。有没有更好的方法呢?
答案 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用例非常有用,因为查询只需要比较字符串,而不是首先转换字段,它必须多次进行比较。