gpt4 book ai didi

mysql - 将 SQLite3 迁移到 MySQL 的快速简单方法?

转载 作者:行者123 更新时间:2023-11-30 01:13:38 31 4
gpt4 key购买 nike

有人知道将 SQLite3 数据库迁移到 MySQL 的快速简单方法吗?

最佳答案

每个人似乎都是从一些 grep 和 perl 表达式开始的,你会得到一些适合你的特定数据集的东西,但你不知道它是否正确导入了数据。我非常惊讶没有人构建一个可以在两者之间进行转换的可靠库。

这里列出了我所知道的两种文件格式之间 SQL 语法的所有差异:以以下内容开头的行:

  • 开始交易
  • 提交
  • sqlite_sequence
  • 创建唯一索引

未在 MySQL 中使用

  • SQLite 使用 CREATE TABLE/INSERT INTO "table_name",MySQL 使用 CREATE TABLE/INSERT INTO table_name
  • MySQL 不在架构定义中使用引号
  • MySQL 在 INSERT INTO 子句中对字符串使用单引号
  • SQLite 和 MySQL 在 INSERT INTO 子句中转义字符串的方式不同
  • SQLite 使用 't''f' 表示 bool 值,MySQL 使用 10(a当您的 INSERT INTO 中包含类似“I do, you don't”的字符串时,简单的正则表达式可能会失败)
  • SQLLite 使用 AUTOINCRMENT,MySQL 使用 AUTO_INCRMENT

这是一个非常基本的破解 Perl 脚本,它适用于我的数据集,并检查我在网络上找到的其他 Perl 脚本的更多这些条件。 Nu 保证它适用于您的数据,但请随意修改并发回此处。

#! /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;
}
}

关于mysql - 将 SQLite3 迁移到 MySQL 的快速简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19264146/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com