简述
适合阅读对象:移动开发
sqlite3数据迁移到mysql会遇到许多语法问题,想要一下列出所有问题会力所不及,本文会尽量多的列出可能会遇到的问题,因为每个人遇到的问题都不一样。读者根据此文可以提前预知是否有自己会面临到的问题,做到心中有数才能避免或减少迁移数据后会发生意料之外的问题。根据问题列表可以了解自己需要解决哪些问题,我这里同时会给出一个解决方案供大家参考。迁移这个问题不会有一个万能的方案的,因为每个人遇到的问题不同,如果一些互相冲突的问题同时存在解决方案中反而就变成了一个问题。
好了,开门见山!
问题列表
1、sqlite3 dump出的各种变量在mysql不识别,如(BEGIN TRANSACTION、COMMIT等等)
2、sqlite数据库数据无法导出隐藏字段rowid
3、sqlite数据库数据导出格式与其他数据库不兼容,如单引号、双引号问题
4、导出的sqlite数据不带列名,如下 INSERT INTO protocol VALUES('大类页(新)', ' ')
。我们可能需要的是 INSERT INTO protocol('text1','text2') VALUES('大类页(新)', '刷新页')
5、特殊符号处理,如转义符 "\"
6、表字段长度限制不一样
7、数据量写入效率问题
问题解决
首先不能使用sqliteStudio、Navicat等工具,这里采用shell命令的方式,直接避免一下内容生成,
BEGIN TRANSACTION
COMMIT
CREATE UNIQUE INDEX
PRAGMA foreign_keys=OFF
同时使用shell方式可以用很少的代码量实现。
1、解决字段列名没有输出问题
运行sqlite3命令“ pragma table_info(表名);
“得到以下输出内容
0|name|TEXT|0||0
1|description|TEXT|0||0
再通过字符串替换得到列名,如下:
假设变量为 COLS = name,description
2、解决单引号、双引号问题
运行sqlite3命令“ .mode insert && .dump 表名
“得到如下输出内容
INSERT INTO表名VALUES('test',' test');
INSERT INTO表名VALUES('test','test');
INSERT INTO表名VALUES('test','test');
以这种方式可以解决单引号双引号问题,这里直接统一输出单引号
3、解决sqlite3默认字段rowid无法显示问题,这里直接将rowid改为id
将当前模式设置为.dump insert 模式
运行sqlite3命令“ select rowid as id,$COLS from 表名
“得到如下输出
INSERT INTO表名VALUES(1,'test',' test');
INSERT INTO表名VALUES(2,'test','test');
INSERT INTO表名VALUES(3,'test','test');
4、通过shell字符串命令,将之前得到的列名添加到以下sql语句
修改后如下:
INSERT INTO表名('name',' description')VALUES(1,'test',' test');
INSERT INTO表名('name',' description')VALUES(2,'test','test');
INSERT INTO表名('name',' description')VALUES(3,'test','test');
5、转义符处理
如果数据库里的数据存在转义符,如: {\"lastname\":\\"天津\\"}
。这种数据如果不处理,那么将数据insert到数据库时会变成{"lastname":\"天津\"}
。所以需要对转义符做下处理,用shell命令处理很简单,如命令:sed 's#\\#\\\\#g'
方案实现
此脚本主要解决了以上1~5问题,根据需要可以对脚本进行修改
#!/bin/sh SQLITE=sqlite3 if [ -z "$1" ] ; then echo usage: $0 sqlite3.db exit fi DB="$1" TABLES=`"$SQLITE" "$DB" .tables` for TABLE in $TABLES ; do CREATE=`"$SQLITE" "$DB" "SELECT sql FROM sqlite_master WHERE type=\"table\" AND name = \"$TABLE\";"` echo $CREATE";" | cut -d'=' -f2 | sed "s/^CREATE TABLE $TABLE (/CREATE TABLE $TABLE (id int auto_increment primary key ,/g" COLS=`"$SQLITE" "$DB" "pragma table_info($TABLE)" | cut -d'|' -f2 ` COLS_CS=`echo $COLS | sed 's/ /,/g'` echo ".mode insert \n.header on \n select rowid as id,$COLS_CS from $TABLE;\n" | "$SQLITE" "$DB" | sed "s/^INSERT INTO \"table\"/INSERT INTO $TABLE /g" | sed 's#\\#\\\\#g' done
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 周慧敏《94美的化身演唱会》宝丽金1995港版2CD[WAV+CUE]
- 娃娃.1997-精选180绝版冠军精丫滚石】【WAV+CUE】
- 娃娃.1997-精选290巅峰情歌经典【滚石】【WAV+CUE】
- 王忆灵.2024-枯萎颂【FLAC分轨】
- 林墨《绿色的风》[320K/MP3][22.6MB]
- 林墨《绿色的风》[FLAC/分轨][98.61MB]
- 群星《奥运加油热歌精选》[320K/MP3][87.73MB]
- 2024的炼金龙魂是什么效果 英雄联盟炼金龙魂效果介绍
- lol全球总决赛2024冠军是哪个队伍 2024全球总决赛冠军介绍
- 英雄联盟zofgk是什么意思 英雄联盟zofgk解释一览
- 如何评价《剑星》联动《尼尔》新服装、照相模式?
- 华沙保时捷经销商展出911Turbo:强尼银手同款
- 《P5》战斗曲改编版获格莱美提名!2月2日公布获奖者
- 付娜《相思HQ》古筝专辑[原抓WAV+CUE]
- 群星.2011-电视剧原声《新水浒传》广东音像【WAV+CUE】