將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
(當你有一個字符串時,一個簡單的正則表達式可能會失?。?#39;我做,你不在你的內部INSERT INTO
)SQLLite使用
AUTOINCREMENT
,MySQL使用AUTO_INCREMENT
這是一個非?;镜谋黄平獾膒erl腳本,它適用于我的數據集,并檢查我在網上找到的其他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
提交
取消