2014-03-25 162 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 
} 
...