2014-03-25 97 views
5

當我有一個帶雙引號的字段時,mysqldump把轉義字符放在前面。例如:mysqldump,避免轉義雙引號

「我的‘測試’」 - > mysqldump的產生與像「我的\‘測試\’」那場文件

的問題是,我使用的文件的一些數據導入一個sqlite數據庫,並且SQLite不會刪除轉義字符。所以我不需要那個mysqldump寫轉義字符,我可以這樣做嗎?

+0

如果你能提供你已經嘗試過的代碼,將是有益的。 – Radmation

回答

-1

從谷歌搜索我發現this這是改造mysqldump的輸出,所以sqlite可以使用它。 未經測試和5歲,但我認爲:

  • 你可以找到有用的信息
  • 這可能意味着其他人沒有找到一個更好的解決方案

編輯:

根據意見,要回答你的問題,它看起來像你沒有選擇,但取代\""

Here是一個具有script的回購,它將mysqldump文件轉換爲sqlite可以摘要的東西。 特別是,對於你的問題,你可以找到this line

gsub(/\\"/, "\"") 
0

我不能確定你使用的是什麼語言。但是這個概念在任何編程語言中都是一樣的。

首先聲明一個等於您的sqldump的變量。

var yourVariable = sqldump; 

然後做一個string.replace(「\\」,「」)。 然後使用'清理'版本導入您的數據。

0

您使用哪種SQL模式? 看那mysqldump的手冊:http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

--quote-名稱,內 「`」字符-Q

引用標識符(如數據庫,表名和列名)。如果啓用了ANSI_QUOTES SQL模式,則標識符 在「」「字符中引用。默認情況下啓用此選項。 可以使用--skip-quote-names禁用該選項,但此選項應爲 作爲--compatible其可以使得 --quote-名稱。

--quote-names默認啓用。

ANSI_QUOTES

治療「「」作爲標識符引號字符(如日e「`」引用 字符)而不是字符串引號字符。您仍然可以使用「`」「 引用啓用此模式的標識符。在啓用ANSI_QUOTES的情況下, 不能使用雙引號引用文字字符串 ,因爲它被解釋爲標識符。

+0

問題出在數據中,而不是表名和列名 – Rahul

2

如果在* nix(UNIX,LINUX,MAC)的機器,我可以建議使用SED來替換\ 「用」:

mysqldump [options] DB [table] | sed -e 's/\\"/"/g' 

,或者對於是已經存在的mydump.sql文件:

sed -i -e 's/\\"/"/g' mydump.sql 

編輯:尋找一個正式的MySQL的答案,我才發現這個有點關係有關單引號轉義開放的bug - https://bugs.mysql.com/bug.php?id=65941

還值得一提的是,還有其他工具可以轉儲數據庫,而不必先用反斜槓引號引用引號,例如JetBrains產品(DataGripIntelliJ等)。

0

您可以在mysqldump輸出文件中轉換轉義。 檢查esperlu MySQL to Sqlite converter script

 
... 
/INSERT/ { 
    gsub(/\\\047/, "\047\047") 
    gsub(/\\n/, "\n") 
    gsub(/\\r/, "\r") 
    gsub(/\\"/, "\"") 
    gsub(/\\\\/, "\\") 
    gsub(/\\\032/, "\032") 
    print 
    next 
} 
...