Лучший способ обрезать пробелы, CR, LF в поле CSV во время загрузки DATA INFILE в PHP / MySQL? - PullRequest
1 голос
/ 24 января 2012

По поводу LOAD DATA INFILE задано около 4500 вопросов, но ни один, который я не смог найти, касался моей конкретной проблемы.

У меня есть пользователи, загружающие файлы CSV в базу данных MySQL (я использую сценарий LOAD DATA INFILE на бэкэнде), и иногда в полях есть тупые символы, которые необходимо очистить ... в частности, пробелы, CR и LF .

Вот запрос LOAD:

LOAD DATA LOCAL INFILE '".$csvfile."' INTO TABLE table_name FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(@dummy,Field2,Field3,Field4)
SET Field1 = (SELECT ID FROM table_a WHERE Username = 'foo');

Код работает просто отлично, все, что я хочу сделать, это очистить входящие поля, которые могут содержать ненужные символы. Я полагаю, что могу просто выполнить очистку в строке SET, используя REPLACE ... Это правда?

SET Field1 = (SELECT ID FROM table_a WHERE Username = 'foo'), REPLACE(Field2,'\r\n','');

Другая идея, с которой я столкнулся, заключалась в том, чтобы справиться с этим в следующем запросе:

$trimQuery = "UPDATE table_name SET Field2 = TRIM(Field2), Field2 = REPLACE(Field2,'\r\n','')";

Итак, мой вопрос в четыре раза:

  1. Будет ли нарушен ввод, если НЕТ каких-либо ненужных символов для поиска?
  2. Что если я тоже хочу обрезать пробелы?
  3. Что, если есть только '\ r', он будет пропущен или потерпит неудачу?
  4. Есть ли какой-нибудь способ лучше использовать регулярные выражения?

Спасибо !!

...