• ADADADADAD

    sqlite3迁移mysql可能遇到的问题有哪些[ mysql数据库 ]

    mysql数据库 时间:2024-11-28 13:25:32

    作者:文/会员上传

    简介:

    问题列表1、sqlite3 dump出的各种变量在mysql不识别,如(BEGIN TRANSACTION、COMMIT等等)2、sqlite数据库数据无法导出隐藏字段rowid3、sqlite数据库数据导出格式与其他数据库不

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    问题列表

    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/shSQLITE=sqlite3if[-z"$1"];thenechousage:$0sqlite3.dbexitfiDB="$1"TABLES=`"$SQLITE""$DB".tables`forTABLEin$TABLES;doCREATE=`"$SQLITE""$DB""SELECTsqlFROMsqlite_masterWHEREtype=\"table\"ANDname=\"$TABLE\";"`echo$CREATE";"|cut-d'='-f2|sed"s/^CREATETABLE$TABLE(/CREATETABLE$TABLE(idintauto_incrementprimarykey,/g"COLS=`"$SQLITE""$DB""pragmatable_info($TABLE)"|cut-d'|'-f2`COLS_CS=`echo$COLS|sed's//,/g'`echo".modeinsert\n.headeron\nselectrowidasid,$COLS_CSfrom$TABLE;\n"|"$SQLITE""$DB"|sed"s/^INSERTINTO\"table\"/INSERTINTO$TABLE/g"|sed's#\\#\\\\#g'done
    sqlite3迁移mysql可能遇到的问题有哪些.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: sqlite3mysql