mysql轉sqlite

前幾天剛好遇到這個問題,不要問我說為啥我要轉,只是突然想到...XDrz

可以參考這裡sqlite - Converter Tools

當然我的作法是將步驟分開來作的

先將sqldump出來

1
mysqldump -u'username' -p'password' --compact --compatible=ansi --default-character-set=binary 'databasename' > database.sql

接著就利用內部所說的sh script擷取部份

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh

cat database.sql |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/gi' |
sed 's/ smallint([0-9]*) / integer /gi' |
sed 's/ tinyint([0-9]*) / integer /gi' |
sed 's/ int([0-9]*) / integer /gi' |
sed 's/ character set [^ ]* / /gi' |
sed 's/ enum([^)]*) / varchar(255) /gi' |
sed 's/ on update [^,]*//gi' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
   $a=$1;
   s/\\'\''/'\'\''/g;
   s/\\n/\n/g;
   s/\),\(/\);\n$a\(/g;
}
' > output.sql
cat output.sql | sqlite3 output.db > output.err

這樣的好處是說只要亦有問題,可以依照error message出現的錯誤去修正database.sql,老實他那個error message一直沒有辦法被output出來,建議使用script指令紀錄錯誤訊息,利用錯誤訊息慢慢去修正會比較好。

Wed Aug. 11 2010
Comments

Comments