SQLite3中持续出现数据类型不匹配错误的排查求助
解决SQLite中"datatype mismatch"错误
错误根源
你创建的PilotAirlines表中,PilotID被定义为INTEGER PRIMARY KEY,但在INSERT语句中传入的是字符串类型的值(比如'P00100'、'00100',带单引号的都是字符串),这直接导致类型不匹配错误。
修复方案
根据需求,有两种可行的修复方式:
方案1:修改表结构,将PilotID改为TEXT类型
如果需要保留带前缀或固定格式的ID(比如P00100),直接修改PilotAirlines的表定义,把PilotID的类型改为TEXT:
CREATE TABLE PilotAirlines ( PilotID TEXT PRIMARY KEY, FName TEXT, LName TEXT, JobTitle TEXT, Salary REAL, AirlineID INTEGER, NPlanes TEXT, NRoutes TEXT, NPilots TEXT, FOREIGN KEY (AirlineID) REFERENCES Airlines (AirlineID) );
修改后原有的INSERT语句(带字符串ID)即可正常执行。
方案2:保持PilotID为INTEGER,插入整数类型的值
如果不需要前缀,直接插入纯整数值,去掉单引号和前缀P:
INSERT INTO PilotAirlines (PilotID, FName, LName, JobTitle, Salary, AirlineID, NPlanes, NRoutes, NPilots) VALUES (100, 'John', 'Hancock', 'Pilot', 110000, 1, NULL, NULL, NULL), (101, 'Sally', 'Smith', 'CoPilot', 95000, 2, NULL, NULL, NULL), (102, 'Nancy', 'Smith', 'Pilot', 115000, 3, NULL, NULL, NULL), (103, 'William', 'Hart', 'CoPilot', 85000, 1, NULL, NULL, NULL), (104, 'Jane', 'Doe', 'Pilot', 95000, 3, NULL, NULL, NULL);
额外注意
你第二次修改的INSERT语句里有重复的('00101', 'Sally', 'Smith', ...)记录,即使修复类型问题,后续也会触发主键重复错误,记得去重。
内容的提问来源于stack exchange,提问作者cerea7ki77a
相关产品推荐
相关产品推荐

