久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

sqlite3遷移mysql可能遇到的問題有哪些

151次閱讀
沒有評論

共計 2096 個字符,預計需要花費 6 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 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

以上是“sqlite3 遷移 mysql 可能遇到的問題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2096字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 苏州市| 樟树市| 四平市| 赫章县| 孟连| 开鲁县| 通城县| 贵溪市| 泰宁县| 洛川县| 安岳县| 延庆县| 宜章县| 达拉特旗| 杨浦区| 罗甸县| 宝丰县| 辉南县| 苗栗县| 泰州市| 林西县| 武强县| 武乡县| 裕民县| 武城县| 和龙市| 兴海县| 监利县| 巩留县| 黄冈市| 灵山县| 玉树县| 微博| 荃湾区| 美姑县| 楚雄市| 湖州市| 壤塘县| 都昌县| 揭阳市| 安图县|