Проблема Utf8 с ° ​​при вставке mysql

у меня есть проект, работающий на Laravel.

Моя функция получает файлы (файлы UTF8) в хранилище, а затем анализирует/вставляет данные в таблицу mysql (Mysql находится в utf8mb4_unicode_ci).

Я застрял из-за этой ошибки в некоторых файлах при вставке: Общая ошибка: 1366 Неверное строковое значение: '\ xC2'

Соответствующий текст не может быть вставлен: «La clairière d'Eole n ° 5».

Проблема, кажется, в символе «°». Когда я удаляю его, вставка работает. Нет проблем с акцентом, просто ° и я не знаю, почему.

Я пробовал некоторые preg_replace, iconv, но безуспешно.


person Kévin Leval    schedule 04.09.2018    source источник
comment
Не могли бы вы попробовать использовать utf8_general_ci для своей базы данных?   -  person Mtxz    schedule 04.09.2018
comment
я могу без проблем вставить La clairière d'Eole n°5 в utf8mb4_unicode_ci или utf8mb4_bin , а mysql default-character-set=utf8mb4   -  person kenken9999    schedule 04.09.2018
comment
это работает, если я делаю utf8_encode, но текст становится Lotissement La clairière d'Eole № 5   -  person Kévin Leval    schedule 05.09.2018


Ответы (2)


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

В Windows MS Excel ожидает CSV-файл в кодировке UTF-8 с соответствующим символом спецификации. Чтобы выполнить это требование, вам просто нужно добавить символ спецификации UTF-8.

В системе MacOS для MS Excel требуется CSV-файл, закодированный в UTF-16 LE с использованием символа табуляции в качестве разделителя.

Вы можете использовать эту библиотеку для разбора CSV-файла. Они уже включают этот материал в библиотеку. https://csv.thephpleague.com/9.0/interoperability/encoding/

person Andrey Svyrydov    schedule 04.09.2018
comment
Я понимаю, что вы имеете в виду, но я прочитал плоский текстовый файл с разделителями, здесь нет CSV. - person Kévin Leval; 05.09.2018
comment
Возможно, этот ответ может помочь stackoverflow. ком/вопросы/34480910/ - person Andrey Svyrydov; 05.09.2018

Похоже, что-то настроено на ascii, а не на utf8 и даже не на latin1.

° недоступен в ascii, отсюда и вероятная причина ошибки. В latin1 это шестнадцатеричное число B0. В utf8 это C2B0. Поскольку в сообщении об ошибке упоминается только C2, я предполагаю, что целевой набор символов - ascii, а не latin1.

Пожалуйста, предоставьте SHOW CREATE TABLE и технику, которую вы используете для чтения файлов -- больше, чем "чтение простого текстового файла".

person Rick James    schedule 01.10.2018