用于MS Access的SQLite数据类型

用于MS Access的SQLite数据类型,sqlite,ms-access-2010,Sqlite,Ms Access 2010,我正在尝试将许多相当大的access数据库[8个数据库中大约有20 mil条记录]重新创建到一个SQLite数据库中,然后在我的主MS access数据库中链接到该数据[充满了用户输入的数据和指向所有大表和内容的链接] 我可以在SQLite中创建大表,Access可以链接到它,调出表,但是所有字段类型都是作为备忘录来的,当然不能连接到它 大多数字段在SQLIte中作为文本字段存在 有没有办法避免它们链接为备注字段 所以,大多数字段都是字母数字的,我把它们都放在文本中,因为它们主要是我链接的ID字

我正在尝试将许多相当大的access数据库[8个数据库中大约有20 mil条记录]重新创建到一个SQLite数据库中,然后在我的主MS access数据库中链接到该数据[充满了用户输入的数据和指向所有大表和内容的链接]

我可以在SQLite中创建大表,Access可以链接到它,调出表,但是所有字段类型都是作为备忘录来的,当然不能连接到它

大多数字段在SQLIte中作为文本字段存在

有没有办法避免它们链接为备注字段


所以,大多数字段都是字母数字的,我把它们都放在文本中,因为它们主要是我链接的ID字段,它们都是直接从Salesforce中提取的CSV,下面是最小的一个,这些通常都是作为文本字段导入access,在SQLite中它们作为文本字段导入,但是从SQLite链接到access,它们给人的印象是备忘录

样本数据为

"Id","CreatedById","CreatedDate","End_Date__c","Future_Sale_Cycle__c","IsDeleted","LastModifiedById","LastModifiedDate","LastReferencedDate","LastViewedDate","Name","OwnerId","Start_Date__c","SystemModstamp"
"a4N900000004PXrEAM","005900000041XdPAAU","2015-05-29T06:20:07.000Z","2016-02-13","a4N6F000000L34HUAS","false","00590000003cQMIAA2","2016-02-12T00:22:23.000Z","2016-02-14T23:02:02.000Z","2016-02-14T23:02:02.000Z","YPSEL2-36","00590000003cQMIAA2","2015-02-23","2016-04-22T11:07:45.000Z"

我加入的文本字段可以是9位、12位、15位或18位字母数字,它们始终是ID字段,字母和数字的混合体

我有一个MS Access 2010数据库与链接SQL表的组合,并且体验到与您相同的效果

我能够绕过它的唯一方法是为我想要加入的每个表创建查询。对于每个固定长度的文本字段,我使用
Left$
函数创建一个新字段

然后,使用这些查询将链接字段与常规访问表连接起来,而不是直接连接到SQLITE表

因此,对于上面的示例,您可以将这些字段添加到查询中

LinkID: Left$([ID], 18)
LinkCreatedByID: Left$([CreatedById], 18)
LinkOwnerId: Left$([OwnerId], 18)
LinkName: Left$([Name], 9)

希望这会有所帮助这有点让人困惑

根据,SQLite只有一个文本数据类型(text),没有长度限制

但是当我在一个新的SQLite数据库中创建一个表时

sqlite> create table t1 (id integer primary key, txt varchar(20));
并通过将该表链接到Access中,
txt
列的数据类型为
Text(20)
。我可以加入这个专栏。
另一方面,
TEXT
列链接为
Memo

因此:由于您自己创建SQLite数据库,因此我建议将文本字段创建为
varchar(255)
或更小


但请注意:在我的示例表中,我可以愉快地插入大于20个字符的字符串:

sqlite> insert into t1 values (7, 'dings');
sqlite> insert into t1 values (8, 'dingsaaaaabbbbbccccc');
sqlite> insert into t1 values (9, 'dingsaaaaabbbbbcccccddddd');
sqlite> select * from t1;
7|dings
8|dingsaaaaabbbbbccccc
9|dingsaaaaabbbbbcccccddddd
id  txt
7   dings
8   dingsaaaaabbbbbccccc
9   dingsaaaaabbbbbccccc
但在Access中,我只有20个字符:

sqlite> insert into t1 values (7, 'dings');
sqlite> insert into t1 values (8, 'dingsaaaaabbbbbccccc');
sqlite> insert into t1 values (9, 'dingsaaaaabbbbbcccccddddd');
sqlite> select * from t1;
7|dings
8|dingsaaaaabbbbbccccc
9|dingsaaaaabbbbbcccccddddd
id  txt
7   dings
8   dingsaaaaabbbbbccccc
9   dingsaaaaabbbbbccccc

因此,我建议使用
varchar(255)
,即使字符串要小得多。

SQLite字段的文本大小是多少?如果>255,它们将被解释为备忘录。//加入文本字段(而不是数字)对我来说是一个警告,但如果必须的话,这些文本字段应该很小。因此,大多数字段都是字母数字的,我把它们全部作为文本,因为它们主要是我链接的ID字段,它们都是直接从Salesforce中提取的CSV,下面是最小的一个,这些通常都是作为文本字段导入access,在SQLite中它们作为文本字段导入,但从SQLite链接到access时,它们会出现在备注示例数据被创建时。ById,CreatedDate,End_Date_uuC 0059000041xdpaau,2015-05-29T06:20:07.000Z,13/02/2016请添加与该示例数据匹配的SQLite表定义。此外,该表的MS Access表定义也会有所帮助。然后我可以看到相应的列定义是什么。@RyanVincent写了什么-这也是我要问的。)问题不在于字段中实际存储了多少数据,而是定义了多大的数据。请将您的解决方案作为答案发布,以便对我们有所帮助。说真的,我不知道你是怎么做到的,我真的很想知道。或者至少解释一下
没有设置文本大小的真正含义。