![]() |
1
55
每个人似乎都从一些greps和perl表达式开始,你或多或少会得到一些适用于你特定数据集的东西,但你不知道它是否正确导入了数据。我非常惊讶没有人建立一个可以在两者之间转换的可靠库。 这里列出了我所知道的两种文件格式之间SQL语法的所有差异: 以以下开头的行:
MySQL中未使用
这是一个非常基本的黑客攻击perl脚本,适用于 我的 数据集,并检查我在网上发现的其他perl脚本中的更多这些条件。Nu保证它将适用于您的数据,但请随时修改并发布回此处。
|
![]() |
2
99
以下是转换器列表(自2011年以来未更新):
另一种效果很好但很少被提及的方法是:使用一个ORM类,为您抽象出特定的数据库差异。例如,你在PHP中得到这些( RedBean )Python(Django的ORM层, Storm , SqlAlchemy )Ruby on Rails( ActiveRecord ),可可( CoreData ) 即,您可以这样做:
|
![]() |
3
47
这是一个python脚本,基于Shalmanese的回答和Alex martelli的一些帮助构建,网址为 Translating Perl to Python 我正在把它变成社区维基,所以只要它不破坏功能,请随意编辑和重构(谢天谢地,我们可以回滚)——它很难看,但很有效
这样使用(假设脚本被调用
然后,您可以将其导入mysql 注意-您需要手动添加外键约束,因为sqlite实际上并不支持它们 这是脚本:
|
![]() |
4
22
|
![]() |
5
8
如果你正在使用Python/Dango,这很容易: 在settings.py中创建两个数据库(如下所示 https://docs.djangoproject.com/en/1.11/topics/db/multi-db/ ) 那么就这样做:
|
![]() |
6
8
最简单的方法可能是使用sqlite.dump命令,在这种情况下创建示例数据库的转储。
然后,您可以(理论上)使用root用户将其导入mysql数据库,在本例中为数据库服务器127.0.0.1上的测试数据库。
我说在理论上,因为语法之间存在一些差异。 在sqlite中,事务开始
MySQL仅使用
还有其他类似的问题(varchars和双引号又浮现在脑海中),但没有任何查找和替换无法解决的问题。 也许你应该问为什么要迁移,如果性能/数据库大小是问题所在,也许可以考虑重新启动模式,如果系统正在转向更强大的产品,这可能是规划数据未来的理想时机。 |
![]() |
7
7
我刚刚经历了这个过程,这个问答中有很多很好的帮助和信息,但我发现我必须将各种元素(加上其他问答中的一些元素)整合在一起,才能得到一个有效的解决方案,才能成功迁移。 然而,即使在结合了现有的答案后,我发现Python脚本对我来说也不完全有效,因为在INSERT中有多个布尔值出现的情况下它不起作用。看见 here 为什么会这样。 所以,我想在这里发布我的合并答案。当然,这要归功于那些在其他地方做出贡献的人。但我想回馈一些东西,并为其他人节省时间。 我会把剧本贴在下面。但首先,这是转换的说明。.. 我在OS X 10.7.5 Lion上运行了这个脚本。Python开箱即用。 要从现有的SQLite3数据库生成MySQL输入文件,请在自己的文件上运行脚本,如下所示:,
然后,我将得到的dumped_sql.sql文件复制到运行Ubuntu 10.04.4 LTS的Linux机器上,我的MySQL数据库将驻留在那里。 导入MySQL文件时遇到的另一个问题是,一些unicode UTF-8字符(特别是单引号)没有正确导入,因此我不得不在命令中添加一个开关来指定UTF-8。 将数据输入一个全新的空MySQL数据库的命令如下:
让它煮吧,应该就是这样!别忘了在之前和之后仔细检查你的数据。 因此,正如OP所要求的那样,当你知道如何操作时,它既快捷又简单! :-) 顺便说一句,在我研究这次迁移之前,有一件事我不确定,那就是created_at和updated_at字段值是否会被保留——对我来说,好消息是它们会被保留,所以我可以迁移我现有的生产数据。 祝你好运 更新 自从切换后,我注意到了一个以前没有注意到的问题。在我的Rails应用程序中,我的文本字段被定义为“string”,这一直延续到数据库模式。这里概述的过程导致这些在MySQL数据库中被定义为VARCHAR(255)。这对这些字段大小设置了255个字符的限制,超出此限制的任何内容在导入过程中都会被自动截断。我认为,为了支持大于255的文本长度,MySQL模式需要使用“text”而不是VARCHAR(255)。此处定义的过程不包括此转换。 以下是对我的数据有效的合并和修订的Python脚本:
|
![]() |
8
6
|
![]() |
9
5
我用Python3写了这个简单的脚本。它可以用作包含的类或通过终端shell调用的独立脚本。默认情况下,它将所有整数导入为
注: 它需要MySQL连接器/Python 2.0.4或更高版本 如果你觉得下面的代码很难阅读,这里有一个指向GitHub上源代码的链接: https://github.com/techouse/sqlite3-to-mysql
|
![]() |
10
5
我最近不得不为我们团队正在进行的一个项目从MySQL迁移到JavaDB Java library written by Apache called DdlUtils 这让事情变得相当容易。它提供了一个API,可以让您执行以下操作:
我们最终得到的工具并没有完全自动化,但它们工作得很好。即使您的应用程序不是用Java编写的,也不难使用一些小工具进行一次性迁移。我想我能够用不到150行的代码完成我们的迁移。 |
![]() |
11
5
获取SQL转储
将转储导入MySQL对于小型进口:
或
这将提示您输入密码。请注意:如果你想直接输入密码,你必须在没有空格的情况下直接输入
对于较大的垃圾场:mysqlimport或其他导入工具,如 BigDump . BigDump会给你一个进度条:
|
![]() |
12
4
基于Jims的解决方案: Quick easy way to migrate SQLite3 to MySQL?
这对我来说很有效。我使用sed只是抛出第一行,这与mysql不同,但你也可以修改dump.py脚本来扔掉这一行。 |
![]() |
13
3
不需要任何脚本、命令等。。。
您只需将sqlite数据库导出为
我用过它,它效果很好。.. |
![]() |
14
2
哈。..我真希望我先找到这个!我的回应是针对这篇文章。.. script to convert mysql dump sql file into format that can be imported into sqlite3 db 将两者结合正是我所需要的: 当sqlite3数据库将与ruby一起使用时,您可能需要更改:
致:
唉,这只起了一半的作用,因为即使你将1和0插入到标记为boolean的字段中,sqlite3也会将它们存储为1和0,所以你必须遍历并执行以下操作:
但是查看sql文件以查找所有布尔值是有帮助的。 |
![]() |
15
2
这个脚本是可以的,除了这个情况,当然,我见过: INSERT INTO "requestcomparison_stopword" VALUES(149,'f'); INSERT INTO "requestcomparison_stopword" VALUES(420,'t'); 脚本应给出以下输出: INSERT INTO requestcomparison_stopword VALUES(149,'f'); INSERT INTO requestcomparison_stopword VALUES(420,'t'); 但给出了这样的输出: INSERT INTO requestcomparison_stopword VALUES(1490; INSERT INTO requestcomparison_stopword VALUES(4201; 最后0和1周围有一些奇怪的非ascii字符。 当我注释以下代码行(43-46)时,这不再出现,但出现了其他问题:
这只是一个特例,当我们想添加一个值为'f'或't',但我对正则表达式不太熟悉时,我只是想发现这个情况需要有人纠正。 不管怎样,非常感谢这个方便的脚本!!! |
![]() |
16
2
这个简单的解决方案对我很有效:
|
![]() |
17
1
注意CREATE语句 |
![]() |
18
1
|
![]() |
19
1
|
![]() |
20
0
|
![]() |
21
0
|
![]() |
22
0
|
![]() |
23
0
|
![]() |
24
0
|
![]() |
25
-1
|
![]() |
26
-5
|