mysqlimport и двойные кавычки - PullRequest
1 голос
/ 20 мая 2009

У нас есть большой текстовый файл с разделителями табуляции (примерно 120 000 записей, 50 МБ), который мы пытаемся внедрить в MySQL с помощью mysqlimport. Некоторые поля заключены в двойные кавычки, некоторые нет. Мы используем переключатель fields-optionally-enclosed-by='\"', но проблема в том, что некоторые значения полей сами содержат двойные кавычки (обозначающие дюймы), поэтому значение поля с разделителями может быть чем-то вроде "ABCDEF19" ". Имеет смысл?

У нас нет контроля над источником файла, поэтому мы не можем изменить форматирование там. Я попытался удалить переключатель fields-optionally-enclosed-by, но затем импортируются двойные кавычки, окружающие значения.

он записи с кавычками в значениях становится серьезно запутанным. Есть ли способ, которым мы можем сказать mysqlimport, что некоторые поля могут быть заключены в кавычки, но все же могут содержать кавычки? Мы подумали, может быть, глобальный поиск и замена, чтобы избежать двойных кавычек в значениях полей? Или какие-либо другие предложения?

Ответы [ 2 ]

1 голос
/ 20 мая 2009

Если ваши данные включают в себя кавычки внутри тела кавычки поля, не разделяя их каким-либо образом, у вас есть проблема. Вы не можете гарантировать, что mysqlimport сделает это правильно.

Сначала массируйте данные, прежде чем пытаться вставить их таким образом.

К счастью, он разделен табуляцией, поэтому вы можете запустить регулярное выражение, чтобы заменить кавычки версией с разделителями, а затем сообщить mysqlimport разделитель.

1 голос
/ 20 мая 2009

Вы можете импортировать его с кавычками (поля-опционально заключены с помощью переключателя), а затем выполнить проверку, если значение имеет двойные кавычки в начале и конце (при условии, что ни одно из значений не имеет дюймов в начале) затем обрежьте на 1 символ от начала и конца, чтобы удалить лишние кавычки, полученные при импорте.

РЕДАКТИРОВАТЬ: после прочтения ответа kekoav, я должен согласиться, что если вы можете манипулировать файлом перед импортом, это было бы гораздо более разумным вариантом, но если вы вынуждены впоследствии удалять кавычки, вы можете использовать что-то вроде этого:

UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'),
MID(table.column,2,(LENGTH(table.column)-2)),
table.column
)

для каждого «столбца» в «таблице»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...