将SQLite3迁移到MySQL的快速简便方法?有人知道将SQLite3数据库迁移到MySQL的快捷方法吗?
3 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
每个人似乎从一些greps和perl表达式开始,你有点得到一些适用于你的特定数据集的东西,但你不知道它是否正确导入数据。我很惊讶没有人建立一个可以在两者之间转换的可靠库。
这里列出了我在两种文件格式之间所知的SQL语法的所有差异:以以下列开头的行:
开始交易
承诺
sqlite_sequence
创建独特的索引
在MySQL中没有使用
SQLlite使用
CREATE TABLE/INSERT INTO "table_name"
和MySQL使用CREATE TABLE/INSERT INTO table_name
MySQL不在架构定义中使用引号
MySQL在
INSERT INTO
子句中使用单引号作为字符串SQLlite和MySQL有不同的方法来转义
INSERT INTO
子句中的字符串SQLlite使用
't'
和'f'
用于布尔值,MySQL使用1
和0
(当你有一个字符串时,一个简单的正则表达式可能会失败:'我做,你不在你的内部INSERT INTO
)SQLLite使用
AUTOINCREMENT
,MySQL使用AUTO_INCREMENT
这是一个非常基本的被破解的perl脚本,它适用于我的数据集,并检查我在网上找到的其他perl脚本的更多这些条件。Nu保证它会为您的数据工作,但可以随时修改并回复此处。
#! /usr/bin/perlwhile ($line = <>){ if (($line !~ /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){ if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/){ $name = $1; $sub = $2; $sub =~ s/\"//g; $line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n"; } elsif ($line =~ /INSERT INTO \"([a-z_]*)\"(.*)/){ $line = "INSERT INTO $1$2\n"; $line =~ s/\"/\\\"/g; $line =~ s/\"/\'/g; }else{ $line =~ s/\'\'/\\\'/g; } $line =~ s/([^\\'])\'t\'(.)/$1THIS_IS_TRUE$2/g; $line =~ s/THIS_IS_TRUE/1/g; $line =~ s/([^\\'])\'f\'(.)/$1THIS_IS_FALSE$2/g; $line =~ s/THIS_IS_FALSE/0/g; $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g; print $line; }}
添加回答
举报
0/150
提交
取消