Mọi người dường như bắt đầu với một vài biểu thức greps và perl và bạn sắp có được thứ gì đó phù hợp với tập dữ liệu cụ thể của mình nhưng bạn không biết liệu nó có được nhập dữ liệu chính xác hay không. Tôi thực sự ngạc nhiên là không ai xây dựng một thư viện vững chắc có thể chuyển đổi giữa hai thứ này.
Dưới đây là danh sách TẤT CẢ sự khác biệt về cú pháp SQL mà tôi biết giữa hai định dạng tệp:Các dòng bắt đầu bằng:
- BẮT ĐẦU GIAO DỊCH
- CAM KẾT
- sqlite_sequence
- TẠO CHỈ SỐ DUY NHẤT
không được sử dụng trong MySQL
- SQLite sử dụng
CREATE TABLE/INSERT INTO "table_name"
và MySQL sử dụngCREATE TABLE/INSERT INTO table_name
- MySQL không sử dụng dấu ngoặc kép bên trong định nghĩa lược đồ
- MySQL sử dụng dấu ngoặc kép cho các chuỗi bên trong
INSERT INTO
mệnh đề - SQLite và MySQL có các cách khác nhau để thoát các chuỗi bên trong
INSERT INTO
mệnh đề - SQLite sử dụng
't'
và'f'
đối với boolean, MySQL sử dụng1
và0
(một regex đơn giản cho việc này có thể không thành công khi bạn có một chuỗi như:'I do, you don't' bên trongINSERT INTO
của bạn ) - SQLLite sử dụng
AUTOINCREMENT
, MySQL sử dụngAUTO_INCREMENT
Đây là một tập lệnh perl được hack rất cơ bản hoạt động cho my tập dữ liệu và kiểm tra nhiều điều kiện khác mà các tập lệnh perl khác mà tôi tìm thấy trên web. Nu đảm bảo rằng nó sẽ hoạt động với dữ liệu của bạn nhưng vui lòng sửa đổi và đăng lại tại đây.
#! /usr/bin/perl
while ($line = <>){
if (($line !~ /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){
if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/i){
$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_]*)\"(.*)/i){
$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;
}
}