Mysql: [Invalid utf8mb4 character string: '"???? ?']

При импорте CSV запросом:

`LOAD DATA LOCAL INFILE 'data.csv` INTO TABLE `base` FIELDS TERMINATER...`

Заполучил досадную ошибку: [Invalid utf8mb4 character string: '"???? ?']

То есть, какие-то неподдерживаемые кодировкой символы.

Попробовал перед запросом отправлять SET NAMES utf8mb4 - без толку.

Далее, решил явно указать в запросе:

LOAD DATA LOCAL INFILE 'data.csv` INTO TABLE `base` CHARACTER SET utf8mb4 FIELDS TERMINATER...

Всё равно. Следом уже на удачу попробовал сменить кодировки в таблице на utf8bm4 - опять без толку.

Единственное решение, которое вижу - предварительно вычищать CSV от чего попало, но есть два но:

  1. Файл слишком большой, более 2 гб
  2. Изначально он генерируется неизвестно каким софтом, и при ближайшем обновлении таблицы из файла всё снова начнёт валиться.

Куда стоит копать, что бы избавиться от этой штуки?


Ответы (1 шт):

Автор решения: DeadDed

В общем, пошёл по самому простому пути:

$file = fopen($csvFile,'r');
$out = fopen($output,'w+');

while(!feof($file)){
    $str = fgets($file, 4896);
    $str = mb_convert_encoding($str, 'UTF-8', 'windows-1251');
    fwrite($out,$str);
}

И спокойно записываю это в БД. Долго, нудно, но пока других вариантов не нашёл.

→ Ссылка