tursodatabase/turso

Turso's case-insensitive behaviour for tables and views does not match SQLite

Open

#5730 aperta il 5 mar 2026

Vedi su GitHub
 (2 commenti) (0 reazioni) (0 assegnatari)Rust (1001 fork)github user discovery
compatibilitygood first issue

Metriche repository

Star
 (19.103 star)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

This isn't super obvious from the documentation, but SQLite does case-insensitive comparison only for ASCII characters:

Column names are case-insensitive in the usual way for SQLite column names - upper/lower case equivalence is understood for ASCII-range characters only. (source)

and

The default configuration of SQLite only supports case-insensitive comparisons of ASCII characters. (source)

This might just be a matter of changing Schema.get_object_type, I'm not sure. It compares tables and views using rust's to_lowercase(), which does Unicode folding. But all we need is eq_ignore_ascii_case.

Turso:

turso> create table é(a);
turso> create table É(a);
  × Parse error: table é already exists
turso> create view é as select 1;
turso> create view É as select 1;
  × Parse error: view é already exists

But SQLite accepts these tables and views.

Because of this, Turso can't open databases that have these sorts of tables (it fails when opening the DB).

Guida contributor