废话不多说了,直接给大家贴代码了,具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#! /usr/bin/perl # # based on https://stackoverflow.com/a/87531/5742651 # usage: sqlite3 .dump database_name.sqlite3 | perl sqlite2mysql.pl | mysql -u root -p $import_database_name # # ignore follow lines: # BEGIN TRANSACTION # COMMIT # sqlite_sequence # CREATE UNIQUE INDEX # PRAGMA foreign_keys= OFF # "tablename/field" => `tablename/field` # booleans 't' and 'f' => 1 and 0 # AUTOINCREMENT => AUTO_INCREMENT # varchar => varchar (255) # CREATE TABLE table ... => DROP TABLE table ; CREATE TABLE table ... # Merge insert sqls into multiple insert to speed up # INSERT INTO table VALUES ( 'val1' ); # INSERT INTO table VALUES ( 'val2' ); => INSERT INTO table VALUES ( 'val1' ), ( 'val2' ), ( 'val3' ); # INSERT INTO table VALUES ( 'val3' ); my $ open =0; my $line_cache = '' ; # For speed up print "SET GLOBAL max_allowed_packet=209715200;\n" ; #print "SET AUTOCOMMIT=0;\n" ; while ($line = <>){ if (($line !~ /PRAGMA foreign_keys= OFF /) && ($line !~ / BEGIN TRANSACTION /) && ($line !~ / COMMIT /) && ($line !~ /sqlite_sequence/) && ($line !~ / CREATE UNIQUE INDEX /)){ if ($line =~ / CREATE TABLE \ "([a-z_0-9]*)\"(.*)/){ $name = " \`$1\` "; $sub = $2; $sub =~ s/varchar([^(])/varchar(255)$1/g; $line = " DROP TABLE IF EXISTS $ name ;\nCREATE TABLE $ name $sub\n "; } elsif ($line =~ /CREATE VIEW ([a-z_0-9]*)(.*)/){ $name = " \`$1\` "; $sub = $2; $line = " DROP VIEW IF EXISTS $ name ;\nCREATE VIEW $ name $sub\n "; } elsif ($line =~ /INSERT INTO \"([a-z_]*)\" VALUES(.*);/){ if ($open == 0) { $open = 1; $line_cache .= " INSERT INTO \`$1\` VALUES $2 "; } else { $line_cache .= " , $2 "; } next; }else{ $line =~ s/\'\'/\\\'/g; } if ($open == 1) { $open = 0; $line = $line_cache." ;\n ".$line; $line_cache = ''; } $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; } } #print " SET AUTOCOMMIT=1;\n"; |
总结
以上所述是小编给大家介绍的sqlite迁移到mysql脚本的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.2cto.com/database/201708/665512.html