当我有一个带双引号的字段时,mysqldump把转义字符放在前面。例如:mysqldump,避免转义双引号
“我的‘测试’” - > mysqldump的产生与像“我的\‘测试\’”那场文件
的问题是,我使用的文件的一些数据导入一个sqlite数据库,并且SQLite不会删除转义字符。所以我不需要那个mysqldump写转义字符,我可以这样做吗?
当我有一个带双引号的字段时,mysqldump把转义字符放在前面。例如:mysqldump,避免转义双引号
“我的‘测试’” - > mysqldump的产生与像“我的\‘测试\’”那场文件
的问题是,我使用的文件的一些数据导入一个sqlite数据库,并且SQLite不会删除转义字符。所以我不需要那个mysqldump写转义字符,我可以这样做吗?
我不能确定你使用的是什么语言。但是这个概念在任何编程语言中都是一样的。
首先声明一个等于您的sqldump的变量。
var yourVariable = sqldump;
然后做一个string.replace(“\\”,“”)。 然后使用'清理'版本导入您的数据。
您使用哪种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的情况下, 不能使用双引号引用文字字符串 ,因为它被解释为标识符。
问题出在数据中,而不是表名和列名 – Rahul
如果在* 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产品(DataGrip
,IntelliJ
等)。
您可以在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 } ...
如果你能提供你已经尝试过的代码,将是有益的。 – Radmation