简述

适合阅读对象:移动开发

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

mysql无法识别双引号_sqlite3迁移mysql问题集合攻略相关推荐

  1. jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...

    目录 Window's Note 记录自己在实际操作中用到的问题以及最后的解决方案 前提描述 注册页面用户填写信息后需要执行insert()方法向数据库中插入新用户的信息,需要插入的用户信息变量在数据 ...

  2. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略

    Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略 目录 双下划线介绍 1.关于双下划线的函数或方法或属性 双下划线介绍 1.关于双下划线的函数或方法或属性 __name_ ...

  3. mysql转义单引号双引号_[转] mysql 单引号 双引号

    今天在写一条sql语句的时候,用的双引号,sql语句执行错误.记的同事问我mysql语句中的单引号和双引号有区别吗?回答是没有区别. 今天特地查了查,还是有点区别的. mysql中的一段说明: 在my ...

  4. mysql中何时需要引号,何时在MySQL中使用单引号,双引号和反勾号

    匿名用户 背勾用于表和列标识符,但只有当标识符是MySQL保留关键字,或者标识符包含空格字符或超出有限集合的字符(见下文)时才有必要.通常建议尽可能避免使用保留关键字作为列或表标识符,以避免引用问题. ...

  5. 免费云空间支持ftp/asp/php/cgi/mysql/_免费域名空间pipni.cz申请和使用攻略(MYSQL+PHP+CGI+mail+FTP)...

    呵呵 ,其实大家一直都觉得挺好的域名免费空间,要申请的话当然你得拥有一个自己的域名了,因为注册的时候要以你的域名来访问的,不会分配二级域名. 一.申请 申请条件: 1.你要有良好的网络公德,不要浪费网 ...

  6. python识别魔方色块_解魔方的机器人攻略23 – 识别颜色(上)

    今天看到架子上的萝卜头,已经落了很多灰尘.想起萝卜头的攻略还剩几篇迟迟没有写完.前一段时间一直在试验小爱的手机遥控器功能,从今天开始准备陆续把萝卜头的攻略补完,给博客也打扫打扫灰尘. 说起来真是很惭愧 ...

  7. Windows平板装Android双系统及建立UEFI引导全攻略(windows8.1+android6+phoenix)

    我的windows平板型号是dell venue 11 pro 5130,CPU是Intel baytrail z3770,原系统是windows8.1 32位. 写本文的时候,时间是2016.7. ...

  8. MySQL 中一个双引号的错位引发的血案

    一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程. 二.过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新 于是开发连上了 ...

  9. MySQL中一个双引号错位引发的血案

    一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程. 二.过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新 于是开发连上了 ...

最新文章

  1. 世界被一种神秘的数学力量彻底改变了
  2. 云计算之路-阿里云上:2013年4月7日14:15~18:35服务器故障经过
  3. [转载] 杜拉拉升职记——20 两位同僚
  4. public static float CompareExchange(ref float location1,float value,float comparand)
  5. lombok_Lombok–您绝对应该尝试一下
  6. DB2中select top 用法
  7. win2008server R2 x64 部署.net core到IIS--ASP .NET Core HTTP Error 502.5 – Process Failure
  8. dlib 人脸特征点检测
  9. 反相高低频技术磨皮法
  10. 微信APP支付-签名问题
  11. win11电脑开机密码忘记了怎么办?
  12. [洛谷P1338] 末日的传说
  13. 腾讯云COS全球加速让全球用户加速访问
  14. 关于Obj-c代码静态扫描 iPhone代码静态扫描的问题(clang-analyzer)
  15. mybatis第十话 - mybaits整个事务流程的源码分析
  16. iphone X 屏幕适配
  17. DSPE-PEG-GSH
  18. 无人便利店抢人饭碗?这些“黑科技”将创造百万就业
  19. 华数工业机器人教学视频_华数六轴工业机器人技术知识讲解介绍
  20. Congested Crowd Instance Localization with Dilated Convolutional Swin Transformer

热门文章

  1. 软件测试之图覆盖(作业3)
  2. 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  3. 机器学习自学札记(1)
  4. 学习.net应该知道什么
  5. Yii2 使用 faker 生成假数据(转)
  6. 导航栏透明度渐变; 下拉头视图拉伸效果;勾号动画; 一段文字中点击部分可响应不同事件...
  7. 代码之美~利用构造方法实现模块的解耦
  8. SCOM2007R2上监控TMG之部署Agent
  9. ERP实施--常见问题
  10. 野哥点评了Facebook、Amazon、Google、微软和苹果