私は一般的なビューを利用しており、大文字と小文字を区別しない方法で 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 によって維持されており、最後に照合を変更した結果がわからないため、照合を変更することは避けたいと考えています。