mysqldump,避免转义双引号

时间:2014-03-25 17:09:15

标签: mysql escaping special-characters

当我有一个带双引号的字段时,mysqldump将转义符放在前面。例如:

'我的"测试"' - > mysqldump生成一个包含该字段的文件,例如'我的\" test \"'

问题是我使用该文件将一些数据导入sqlite数据库,而SQLite不会删除转义字符。所以我不需要mysqldump写逃逸字符,我可以这样做吗?

5 个答案:

答案 0 :(得分:2)

如果在* nix(unix,linux,mac)机器上,我建议使用sed替换\“with”:

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

或者,对于现有的mydump.sql文件:

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

编辑:正在搜索正式的MySQL答案,我只发现这个有关单引号转义的相关漏洞 - https://bugs.mysql.com/bug.php?id=65941

还值得一提的是,还有其他工具可以在不首先使用反斜杠转义引号的情况下转储数据库,例如JetBrains产品(DataGripIntelliJ等)。

答案 1 :(得分:0)

我不确定您使用的是哪种语言。 但是这个概念在任何编程语言中都是一样的。

首先声明一个等于sqldump的变量。

var yourVariable = sqldump;

然后执行string.replace(“\\”,“”)。 然后使用“已清理”版本导入数据。

答案 2 :(得分:-1)

从谷歌搜索中我发现this正在重新编写mysqldump的输出,因此sqlite可以使用它。 没有经过测试,5年但我认为:

  • 您可能会找到有用的信息
  • 这可能意味着其他人没有找到更优雅的解决方案

修改

根据评论,为了回答您的问题,您似乎没有选择,只能将\"替换为"

Here是一个带有script的repo,它将mysqldump文件转换为sqlite可以消化的内容。 特别是,对于您的问题,您可以找到this line

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

答案 3 :(得分:-1)

您使用哪种SQL模式? 查看mysqldump手册:http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

  

- quote-names,-Q

     

引用标识符(例如数据库,表和列名称)   “”字符。如果启用了ANSI_QUOTES SQL模式,则为标识符   在“”“字符内引用。默认情况下启用此选项。   可以使用--skip-quote-names禁用它,但是此选项应该是   在任何选项之后给出,例如--compatible可能启用   --quote-名称。

--quote-names默认启用。

  

ANSI_QUOTES

     

将“”“视为标识符引用字符(如”引号“)   字符)而不是字符串引号字符。你仍然可以使用“`”   在启用此模式时引用标识符。启用ANSI_QUOTES后,   你不能使用双引号来引用文字字符串,   因为它被解释为标识符。

答案 4 :(得分:-1)

您可以在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
}
...