1
blacktulip 2015-01-07 01:51:14 +08:00
这个反正我是存之前 .downcase! 一下
|
2
zhangshine 2015-01-07 01:56:41 +08:00 via Android
我一般加个lower username 的unique index
|
3
O14 2015-01-07 02:29:55 +08:00 via Android
把你的query对大小写敏感的部分加上引号试试,应该是单引号,不加单引号postgres好像都会解析成小写
|
4
cevincheung OP @zhangshine
how ? 而且这样也不行啊。注册的时候填写的用户名是 哈哈你好A 然后登录成功后在页面里显示 哈哈你好a ? email那个统一转换小写也倒还行。 还有就是文章标题这种场景,填写的是 How to ...。然后在后台搜索how to。就搜不到这个文章了咩- -### 还有就是对国外的的姓名检索。 输入 Tom Smith。然后后台搜索的时候直接 tom 也搜不出来这货是么? |
5
cevincheung OP @O14
你说的是表名和字段名,那个可以接受,本来就没有给表名和字段名用大写的习惯,这样正好。现在蛋疼过的是对数据的部分。丫的区分的好难受。 |
6
ble 2015-01-07 02:46:50 +08:00 via Android
加多一个字段保存用户名的小写?
|
7
cevincheung OP @ble
难道一定要如此蛋疼吗? - -# |
8
cevincheung OP |
9
cevincheung OP 找到了
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1)); |
10
cevincheung OP @zhangshine
CREATE INDEX content ON test2 USING btree (lower(content::text)) select * from test2 where content = 'fE' content=fe的数据没有被检索出来- -# |
11
zhangshine 2015-01-07 08:37:12 +08:00
@cevincheung http://stackoverflow.com/a/7005656
用户名存的时候还是大小写敏感的,建一个小写的unique index防止出现'fE', 'FE'的情况。 |
12
cevincheung OP @zhangshine
折腾了一晚上没有啥解决方法。官方的回答是这样的。 sql查询,使用 select fields from table where lower(field) = 'value' 然后创建一个非unique的 lower index,让这条SQL走索引。 只有这一个方法。对email、unique username、mobile username这种场景来说,unique lower index还是可以解决问题的。 不过就是不明白,既然都已经把index都lower了,那么在检索的时候为什么大写的数据就是不能搜到?那这个lower index还有什么作用? |
13
zhangshine 2015-01-07 12:59:15 +08:00
@cevincheung 其实我也只懂点皮毛
|
14
leedstyh 2015-01-08 06:15:12 +08:00
字段类型设置为citext,不要使用lower(field) = lower(?)这种,下面的链接有说明:
http://www.postgresql.org/docs/9.4/static/citext.html |