tursodatabase/turso

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

Open

#5 730 ouverte le 5 mars 2026

Voir sur GitHub
 (2 commentaires) (0 réactions) (0 assignés)Rust (1 001 forks)github user discovery
compatibilitygood first issue

Métriques du dépôt

Stars
 (19 103 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

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).

Guide contributeur