繁体   English   中英

mysqldump,避免转义双引号

[英]mysqldump, avoid escape double quotes

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

'我的'测试'' - > mysqldump生成一个带有该字段的文件,如'My \\“test \\”'

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

如果在* 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等)。

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

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

var yourVariable = sqldump;

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

从谷歌搜索我发现是重做mysqldump的输出,所以sqlite可以使用它。 未经测试且5岁但我认为:

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

编辑:

根据评论,回答你的问题,看起来你没有选择,但替换\\"进入"

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

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

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

--quote-names,-Q

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

--quote-names默认情况下启用“ --quote-names

ANSI_QUOTES

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

您可以在mysqldump输出文件中转换转义。 检查esperlu MySQL到Sqlite转换器脚本

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM