Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在转义列名时SQLite不能正确标识视图的列类型?_Sqlite - Fatal编程技术网

为什么在转义列名时SQLite不能正确标识视图的列类型?

为什么在转义列名时SQLite不能正确标识视图的列类型?,sqlite,Sqlite,使用SQLite版本3.8.4.3测试,SQLite使用。 列类型不限制可存储在列中的值的类型或长度 存储列类型是为了与其他数据库兼容,但它们是列的属性,而不是列中的值,因此无法保证从表中取出值时(直接在表上或通过视图执行查询时)会保留类型信息。这有关系吗?SQLite使用动态类型,而类型关联转换(这可能是键入列所影响的唯一事情)仅在您写入值时发生,这在SQLite中的视图上是无论如何都无法执行的。@ColonelHirtyTwo之所以如此,是因为我使用此类型信息来强制转换函数的输入。是的,有一

使用SQLite版本3.8.4.3测试,SQLite使用。 列类型不限制可存储在列中的值的类型或长度


存储列类型是为了与其他数据库兼容,但它们是列的属性,而不是列中的值,因此无法保证从表中取出值时(直接在表上或通过视图执行查询时)会保留类型信息。

这有关系吗?SQLite使用动态类型,而类型关联转换(这可能是键入列所影响的唯一事情)仅在您写入值时发生,这在SQLite中的视图上是无论如何都无法执行的。@ColonelHirtyTwo之所以如此,是因为我使用此类型信息来强制转换函数的输入。是的,有一些变通方法,但我不喜欢到处传递类型信息。例如,BLOB、String和Integer在内部存储为不同的类型,并且必须以不同的方式绑定。那么,当原始表的列名没有转义时,为什么它会起作用呢?从表中读取时,该值根本不会更改。处理引号会对其进行足够的更改,从而丢失类型信息。
CREATE TABLE foo (  this            VARCHAR(64) );
CREATE VIEW far AS SELECT  this            FROM foo;
PRAGMA table_info(far) /* this correctly has VARCHAR(64) as the type */

CREATE TABLE bar ( 'this.is.a.test' VARCHAR(64) );    
CREATE VIEW baz AS SELECT 'this.is.a.test' FROM bar;
PRAGMA table_info(baz) /* this has no type for 'this.is.a.test' */