2014-03-25 4 views
5

Когда у меня есть поле с двойными кавычками, mysqldump помещает escape-символ раньше. Например:mysqldump, избегайте избежать двойных кавычек

«Мой" тест»-> туздЫшпр генерирует файл с этой областью, как«Моим \ „тест \“»

Проблема заключается в том, что я использую этот файл, чтобы импортировать некоторые данные в база данных sqlite, а SQLite не удаляет escape-символ. Поэтому мне не нужно, чтобы mysqldump записывал escape-символы, могу ли я это сделать?

+0

Если вы могли бы предоставить код, который вы пытались что было бы полезно. – Radmation

ответ

-1

Из поиска в google я нашел this, который перерабатывает вывод mysqldump, поэтому sqlite может его использовать. Не тестировался и 5 лет, но я думаю:

  • вы можете найти полезную информацию
  • это может означать, другие люди не нашли более элегантное решение

EDIT:

В соответствии с комментариями, чтобы ответить на ваш вопрос, похоже, что у вас нет выбора, но замените \" на ".

Here - это репо с script, которое переводит файлы mysqldump во что-то, что может переварить sqlite. В частности, для вашего вопроса, вы можете найти this line:

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

Я не уверен, какой язык вы используете. Но концепция будет одинаковой на любом языке программирования.

Сначала объявите переменную равной вашему sqldump.

var yourVariable = sqldump; 

Затем выполните строчку. («\\», «»). Затем используйте эту «очищенную» версию для импорта ваших данных.

0

Какой режим SQL вы используете? Посмотрите на руководство туздЫшпр: http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

--quote наименованиями, -Q

Quote идентификаторы (такие как базы данных, таблицы и имена столбцов) в пределах «`»символов. Если включен режим ANSI_QUOTES SQL, идентификаторы указаны в символах «" ». Этот параметр включен по умолчанию. Его можно отключить с помощью -skip-quote-names, но этот параметр должен быть , указанный после любого варианта в --compatible, которые могут позволить --quote-имена.

--quote-names включена по умолчанию.

ANSI_QUOTES

Treat «"»как идентификатор символа кавычек (например, е e "` "quote ), а не как символ строки.Вы можете использовать «` » , чтобы процитировать идентификаторы при включенном режиме. Если включено ANSI_QUOTES, , вы не можете использовать двойные кавычки для цитирования строк литерала, , потому что он интерпретируется как идентификатор.

+0

Проблема связана с данными, а не с именами таблиц и столбцов – Rahul

2

Если на * NIX (Unix, Linux, Mac) машина, я могу предложить использовать СЭД, чтобы заменить \ "с":

mysqldump [options] DB [table] | sed -e 's/\\"/"/g' 

или для exsiting mydump.sql файла:

sed -i -e 's/\\"/"/g' mydump.sql 

EDIT: поиска для формального ответа MySQL, я только нашел несколько связанных с открытой ошибкой о единственной цитате побеге - https://bugs.mysql.com/bug.php?id=65941

Также стоит упомянуть, что есть другие инструменты, которые могут сбрасывать БД, не избегая котировок с обратной косой чертой, в первую очередь, таких как продукты JetBrains (DataGrip, IntelliJ и т. Д.).

0

Вы можете преобразовать экраны в выходной файл 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 
} 
... 
Смежные вопросы