我碰到了一些对我来说很奇怪的东西,但可能是我误用了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任何建议。 干杯 披
答案 0 :(得分:2)
SQLite支持多个ways of quoting table/column names,但仅支持[name]
和'name'
与其他数据库的兼容性,并且单引号可能被误解为字符串文字。
引用的正确方法是使用双引号:
SELECT "v[0]" FROM u;