当我有一个带双引号的字段时,mysqldump会在前面加上转义字符。例如:
'My "test"' -> mysqldump 生成一个类似于 'My \"test\"' 的文件。
问题是我正在使用该文件将一些数据导入到 SQLite 数据库中,而 SQLite 不会删除转义字符。因此,我不需要 mysqldump 写入转义字符,我能做到吗?
当我有一个带双引号的字段时,mysqldump会在前面加上转义字符。例如:
'My "test"' -> mysqldump 生成一个类似于 'My \"test\"' 的文件。
问题是我正在使用该文件将一些数据导入到 SQLite 数据库中,而 SQLite 不会删除转义字符。因此,我不需要 mysqldump 写入转义字符,我能做到吗?
如果在*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等)。我不确定你使用的是哪种编程语言。 但在任何编程语言中,概念都是相同的。
首先声明一个变量等于你的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
默认启用。
ANSI_QUOTES
将“"”视为标识符引用字符(像“`”引用字符一样),而不是字符串引用字符。在启用此模式时,仍然可以使用“`”引用标识符。启用ANSI_QUOTES后,您不能使用双引号引用文字字符串,因为它被解释为标识符。
"
标记的表示方式。 - miken32您可以将mysqldump输出文件中的转义字符进行转换。 请查看esperlu MySQL to Sqlite 转换脚本:
... /INSERT/ { gsub( /\\\047/, "\047\047" ) gsub(/\\n/, "\n") gsub(/\\r/, "\r") gsub(/\\"/, "\"") gsub(/\\\\/, "\\") gsub(/\\\032/, "\032") print next } ...