Интересная ситуация здесь.Я никогда не переставал думать об этом раньше.Похоже, что использование UPPER
для iexact
поиска было введено еще в ревизии 8536 , в ответ на тикет 3575 , почти три года назад.До этого Django использовал ILIKE
для этих типов поиска.
Я просмотрел код бэкэнда, и единственное, что я могу найти, что указывает на любую причину UPPER
против LOWER
, похоже,что Oracle по умолчанию использует прописные буквы при обработке данных без учета регистра.Поскольку остальные агностики, Django решил использовать значение по умолчанию UPPER
, чтобы охватить все базы.
Другое впечатление, которое я получил от просмотра исходного кода, заключалось в том, что вы не сможете обойти использованиеUPPER
.Это буквально повсюду, а не только при запросе базы данных.Расширение строки upper
в Python также используется довольно часто.
Я бы сказал, что вам лучше всего просто создать индекс с upper(column)
или вместо него и пойти выпить.