Utf8 проблема с ° на MySQL вставке - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть проект, который работает на Laravel.

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

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

Ошибка при вставке соответствующего текста: "La clairière d'Eole n ° 5"

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

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

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Звучит так, как будто для чего-то установлено ascii, а не utf8 или даже latin1.

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

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

0 голосов
/ 04 сентября 2018

В зависимости от программного обеспечения, которое вы используете для чтения 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/

...