我正在Postgresql上运行一个新的Rails应用程序,我不明白为什么在地球上他们使Postgreql区分大小写,甚至没有选择关闭它。
我的意思是,真的,如果有人在我的网站上注册为“Sam”,将无法以“sam”身份登录,但可能有两个不同的帐户“Sam”和“sam”。这是一场灾难,尤其是考虑到所有其他主要数据库都不区分大小写的事实。
现在不是寻找像
这样的用户User.find_by_name(params[:name])
我必须这样做
User.all(:conditions=>["name ILIKE ?", params[:name]]).first
我无法相信在Rails中无法避免这种情况,因为它破坏了框架的一个主要原则:数据库独立性。
是否有更好的方法来实现不区分大小写的用户名/电子邮件架构?
答案 0 :(得分:3)
有一个名为citext的contrib模块,它创建一个不区分大小写的文本类型。我认为默认情况下它只包含在第9.0页开始。
此外,您可以轻松创建一个唯一索引,以防止sam,Sam和SAM同时拥有一个帐户:
创建表abc(用户文本); 在abc上创建唯一索引abc_users_ci(upper(users)); 插入abc值('sam'); 插入abc值('Sam'); 错误:重复键值违反唯一约束“abc_users_ci”
多田!或者你可以抱怨pgsql不像mysql。
答案 1 :(得分:1)
我想你可以有两个DB列,如果保留案例对你很重要:
答案 2 :(得分:1)
特别考虑到 所有其他专业的事实 数据库不区分大小写
这根本不是真的。默认情况下,Oracle,DB2和Firebird区分大小写
但我同意,有这样的选择会让事情变得容易一些。