3 回答

TA貢獻1835條經(jīng)驗 獲得超7個贊
每個人似乎從一些greps和perl表達式開始,你有點得到一些適用于你的特定數(shù)據(jù)集的東西,但你不知道它是否正確導入數(shù)據(jù)。我很驚訝沒有人建立一個可以在兩者之間轉(zhuǎn)換的可靠庫。
這里列出了我在兩種文件格式之間所知的SQL語法的所有差異:以以下列開頭的行:
開始交易
承諾
sqlite_sequence
創(chuàng)建獨特的索引
在MySQL中沒有使用
SQLlite使用
CREATE TABLE/INSERT INTO "table_name"
和MySQL使用CREATE TABLE/INSERT INTO table_name
MySQL不在架構(gòu)定義中使用引號
MySQL在
INSERT INTO
子句中使用單引號作為字符串SQLlite和MySQL有不同的方法來轉(zhuǎn)義
INSERT INTO
子句中的字符串SQLlite使用
't'
和'f'
用于布爾值,MySQL使用1
和0
(當你有一個字符串時,一個簡單的正則表達式可能會失敗:'我做,你不在你的內(nèi)部INSERT INTO
)SQLLite使用
AUTOINCREMENT
,MySQL使用AUTO_INCREMENT
這是一個非常基本的被破解的perl腳本,它適用于我的數(shù)據(jù)集,并檢查我在網(wǎng)上找到的其他perl腳本的更多這些條件。Nu保證它會為您的數(shù)據(jù)工作,但可以隨時修改并回復此處。
#! /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; }}
添加回答
舉報