我在sqlite中使用这个
CREATE TABLE IF NOT EXISTS developer(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,skill TEXT,yearsOfExperience INTEGER);
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Simon', 'Ionic', '4');
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Jorge', 'Firebase', '2');
INSERT INTO developer(name, skill, yearsOfExperience) VALUES ('Max', 'Startup', '5');
虽然这是来自导出的mysql db
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(11) NOT NULL,
`username` varchar(50) DEFAULT NULL,
`password` varchar(300) DEFAULT NULL,
`first_name` varchar(200) DEFAULT NULL,
`last_name` varchar(200) NOT NULL,
`email` varchar(300) DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
他们都是sql,但为什么导入时sqlite不接受第二个? 我希望有人可以告诉我有什么区别所以我可以将第二个sql的副本复制成sqlite可读
答案 0 :(得分:0)
mysql不是sqllite你必须更新你的第二个sql查询,如下所示,以便被sqllite接受(因为sqllite中不存在类型时间戳):
CREATE TABLE IF NOT EXISTS `user` (
`user_id` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` varchar(50),
`password` varchar(300) ,
`first_name` varchar(200),
`last_name` varchar(200) NOT NULL,
`email` varchar(300),
`created` TEXT NOT NULL
);
答案 1 :(得分:0)
您可以将第二个表的当前MySQL CREATE TABLE
语句重构为:
CREATE TABLE IF NOT EXISTS user (
user_id INTEGER NOT NULL,
username TEXT,
password BLOB,
first_name TEXT,
last_name TEXT,
email TEXT,
created INTEGER
)
SQLite的语法不支持指定引擎(例如InnoDB)。此外,没有varchar
列类型,但有TEXT
和INTEGER
。默认情况下,列的值为NULL
,因此如果NULL
是您想要的默认值,则无需明确指定它。 SQLite遵循SQL标准来转义列和表名,并使用双引号而不是反引号。所以我从所有列名中删除了反引号。
最后,我选择将您的created
时间戳设为INTEGER
。您可以存储自纪元以来的秒数,即UNIX时间戳。另一种方法是将时间戳存储为TEXT
,但这可能更难处理,具体取决于您打算做什么。