Opened 16 years ago
Closed 16 years ago
#9905 closed (fixed)
SQLite case-insensitive problem
Reported by: | Eugene Mirotin | Owned by: | Malcolm Tredinnick |
---|---|---|---|
Component: | Documentation | Version: | 1.0 |
Severity: | Keywords: | SQLite, DB, case-insensitive | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
It's known (stated in the SQLite FAQ) that SQLite does not support Unicode LIKE, which leads to Django behaving different on different DBs (see corresponding conversation on the list).
It looks that it can be fixed in the following way:
- including the pre-compiled SqliteIcu libraries
- patching the DB code so that it loads extension when creating DB connection if the engine is 'sqlite'
Unfortunately I'm noob to Python and still have not found the full solution (i.e. where do icu.c really lives in the SQLite code, what pysqlite method should be actually called, and what is the place in Django code where the DB conn is created)
Change History (3)
comment:1 by , 16 years ago
Component: | Database layer (models, ORM) → Documentation |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:2 by , 16 years ago
comment:3 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
I've documented the existing behaviour in the above commit (and, similarly on the 1.0.X branch). Somebody might want to write some Python overrides to implement this at some point. If that patch gets written, a new ticket can be opened. I'll close this for now for the reasons given in comment:1
It isn't valid to assume or expect Django to behave the same on any or all database backends. There are far too many differences between them. It's like hoping that each web browser renders things exactly the same. There are a lot of cases where Django simply returns "whatever the database does" and developers should certainly test their applications on the database they are deploying to.
If you (or somebody) wanted to use the lcu extensions, it would be easy enough to write a custom database backend that included those, but this isn't something we should require/include by default. SQLite is for simple, out-of-the-box deployments and full functionality doesn't require this change. We should add something to the docs to note this, but it's not worth making code changes for.