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 от чего попало, но есть два но:
- Файл слишком большой, более 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);
}
И спокойно записываю это в БД. Долго, нудно, но пока других вариантов не нашёл.