tursodatabase/turso

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

Open

#5,730 opened on 2026年3月5日

GitHub で見る
 (2 comments) (0 reactions) (0 assignees)Rust (1,001 forks)github user discovery
compatibilitygood first issue

Repository metrics

Stars
 (19,103 stars)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド