我使用通用视图,并尝试以不区分大小写的方式查询我的 MySQL 数据库(utf8_bin 排序规则),以尝试查找以特定字母开头的所有歌曲标题。
view.py
def tracks_by_title(request, starts_with):
return object_list(
request,
queryset = Track.objects.filter(title__istartswith=starts_with),
template_name = 'tlkmusic_base/titles_list.html',
template_object_name = 'tracks',
paginate_by = 25,
)
和我的
urls.py
urlpatterns = patterns('tlkmusic.apps.tlkmusic_base.views',
(r'^titles/(?P<starts_with>\w)/$', tracks_by_title),
)
它根据 django 调试工具栏产生的查询是:
SELECT `tracks`.`id`, `tracks`.`url`, `tracks`.`artist`, `tracks`.`album`, `tracks`.`genre`, `tracks`.`year`, `tracks`.`title`, `tracks`.`comment`, `tracks`.`tracknumber`, `tracks`.`discnumber`, `tracks`.`bitrate`, `tracks`.`length`, `tracks`.`samplerate`, `tracks`.`filesize`, `tracks`.`createdate`, `tracks`.`modifydate` FROM `tracks` WHERE `tracks`.`title` LIKE a% LIMIT 1
特别是这一行:
WHERE `tracks`.`title` LIKE a% LIMIT 1
为什么它不区分大小写,这是我使用 __istartswith 所期望的?
我在 Ubuntu 上使用 Django 1.1.1。
编辑
在 phpmyadmin 中运行SELECT *
FROM tracks
WHERE title LIKE 'a%'
LIMIT 0 , 30
仍会返回区分大小写的结果,更改排序规则是我想要避免的,主要是因为数据库由 Amarok 维护,我不知道更改排序规则的结果。