[英]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产品( DataGrip
, IntelliJ
等)。
我不确定你使用的是哪种语言。 但是这个概念在任何编程语言中都是一样的。
首先声明一个等于sqldump的变量。
var yourVariable = sqldump;
然后做一个string.replace(“\\\\”,“”)。 然后使用“已清理”版本导入数据。
您使用哪种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.