mysqldump,避免转义双引号

4

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

'My "test"' -> mysqldump 生成一个类似于 'My \"test\"' 的文件。

问题是我正在使用该文件将一些数据导入到 SQLite 数据库中,而 SQLite 不会删除转义字符。因此,我不需要 mysqldump 写入转义字符,我能做到吗?


1
如果您能提供您尝试过的代码,那将非常有帮助。 - Radmation
5个回答

2

如果在*nix(unix,linux,mac)机器上,我建议使用sed将\"替换为"

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产品(DataGrip、IntelliJ等)。

0

我不确定你使用的是哪种编程语言。 但在任何编程语言中,概念都是相同的。

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

var yourVariable = sqldump;

然后使用 string.replace("\\", "") 进行字符串替换。 然后使用这个“清理过的”版本来导入您的数据。


-1

通过谷歌搜索,我找到了this,它重新处理了mysqldump的输出,以便sqlite可以使用它。 虽然未经测试且已有5年历史,但我认为:

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

编辑:

根据评论,回答您的问题似乎是您别无选择,只能将\"替换为"

这里有一个存储库,其中包含一个脚本,可将mysqldump文件转换为sqlite可以处理的内容。 特别是对于您的问题,您可以找到this line

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

-1

您使用哪种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默认启用。

ANSI_QUOTES

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


1
问题出在数据中,而不是表名和列名。 - Rahul
这个理解有误,问题是关于倾倒数据中"标记的表示方式。 - miken32

-1

您可以将mysqldump输出文件中的转义字符进行转换。 请查看esperlu MySQL to Sqlite 转换脚本

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接