gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:48:32 27 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 使用 AUTOINCREMENT,MySQL 使用 AUTO_INCREMENT

这是一个非常基本的破解 perl 脚本,适用于 my 数据集,并检查我在网络上找到的其他 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/18671/

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