sqlite列名引用(功能或bug)

时间:2016-03-31 16:24:50

标签: sqlite quoting

我碰到了一些对我来说很奇怪的东西,但可能是我误用了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 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);

Hurray,架构看起来不错,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说我们不能(在我的情况下生成列名)

Thanx任何建议。 干杯 披

1 个答案:

答案 0 :(得分:2)

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

SELECT "v[0]" FROM u;