sqlite 列名称引用(功能或错误)

sqlite column name quoting (feature or bug)

我遇到了一些对我来说很奇怪的东西,但可能是我误用了 sqlite3。

create table t (v[0] text);
insert into t values('aa');
select * from t;
v
--------
aa
pragma table_info('t')
cid      name     type   no dfl pk
-------- -------- ------ -- --- ----------
0        v        0      0      0
.schema t;
CREATE TABLE t (v[0] text);

似乎认为列名称已正确输入到架构中,它是由 create/select 处理的 'wrongly',他们在没有任何报告的情况下默默地截断列名称。

现在我们可以认为应该将这种奇怪的列名称输入到架构中,但我找不到这样做的方法。

create table u ('v[0]' text);
insert into u values('aa');
select * from u;
v[0]
--------
aa
$ q pragma table_info('u')
cid      name     type   no dfl pk
-------- -------- ------ -- --- ----------
$        v[0]     text   0      0
$ q .schema u
CREATE TABLE u ('v[0]' text);

万岁,架构看起来不错,SELECT * 很高兴,但现在我对如何使用此列感到困惑。

select v[0] from u;
SQL error 1 : no such column: v
select 'v[0]' from u
'v[0]'
----------
v[0]
select [v[0]] from u
SQL error 1 : unrecognized token: "]"

我真的希望在列名中包含 [],但我没有看到任何 docco 说我们不能(在我的情况下生成列名)

感谢任何建议。 干杯 披

SQLite 支持多个 ways of quoting table/column names,但支持 [name]'name' 只是为了与其他数据库兼容,并且单引号可能会被误解为字符串文字。 正确的引用方式是使用双引号:

SELECT "v[0]" FROM u;