Не записываются в БД символы È и Š

Yan

Новичок
Стокнулся с проблемой, при записи в БД строк с символами È и Š, вместо них записываются, соответственно, "Г€" и "Е ". Кодировка файла UTF-8, сразу после соединения с базой есть строка $mysqli->set_charset("utf8");, таблица в phpmyadmin создана в utf8_general_ci.

Пытался еще выполнить запрос такого типа (просто заменить по всей таблице):
SELECT `field`, REPLACE(`field`,'Г€','È') FROM `table`
Но выдает ошибку:
"Данное выделение не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление невозможно."
Притом, что в таблице существует уникальное поле с primary key с названием id.

Подскажите, как можно решить проблему? Потому что потратил уже уйму часов, а результата так и нет.
 

AnrDaemon

Продвинутый новичок
Не надо ничего подставлять, надо выполнить запрос именно так, как написано.
 

Yan

Новичок
Не надо ничего подставлять, надо выполнить запрос именно так, как написано.
Выполнил, вот результат:


Variable_name----------------------Value

character_set_client-----------------utf8mb4
character_set_connection----------utf8mb4
character_set_database------------utf8
character_set_filesystem-----------binary
character_set_results----------------utf8mb4
character_set_server----------------latin1
character_set_system---------------utf8
character_sets_dir-------------------c:\Server\bin\mysql-5.6\share\charsets

Самое важное значение, я так понимаю, - character_set_database---utf8?
 

AnrDaemon

Продвинутый новичок
Тут всё важное, кроме, пожалуй, character_set_server(это кодировка по умолчанию для новых подключений).
Нормализацию проверьте. Может, оно чудит.
Либо, что скорее всего, вы из UTF-8 в UTF-8 перекодируете при выводе информации.
 

fixxxer

К.О.
Партнер клуба
Первое что надо сделать - прекратить пользоваться phpmyadmin, к этому криворукому поделию доверия мало.

Попробуй с консоли, mysql --default-character-set=utf8mb4

UPD: ой, винда. На винде в консоли с юникодом все тоже плохо. :) SQLYog-ом тогда, или DataGrip, или встроенным клиентом в phpstorm/webstorm/etc.
 
Последнее редактирование:

Yan

Новичок
Всем спасибо за помощь, проблема решилась другим путем.
Суть была в том, что надо было спарсить файл, каждая строка которого выглядит примерно так: "240732";"CILIND. VLOŽEK 35-35 ISEO R6";0,00000;22,80000
Вот надо было разделить эту строку и записать все 4 значения по столбцам в БД. Я использовал explode(";", $value); И потом просто засовывал это в таблицу, сейчас решил функциями substr и strpos разбирать каждую строку и так частями записывать, это сработало, записало все символы È, Š и Ž корректно.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
А твои классы это не глобальные переменные?…
Ты придираешься.
 

WMix

герр M:)ller
Партнер клуба
декларации, не путать с переменными. до тех пор пока psr-0 все ок
 

Yan

Новичок
Бред.
Зачем так извращаться, когда есть http://php.net/manual/en/splfileobject.fgetcsv.php ?
Согласен, что бред, пришлось мучаться еще с этим, пока всю строку нормально разобрал, мне самому не нравится выход
Спасибо, почитаю об этом, потом попробую таким способом.
 

Yan

Новичок
Но все же интересно, может кто знает, почему создание обычного массива $arr = file(file.txt) и его перебор приводит к кривой кодировке при записи в БД, а обычный разбор строки, все нормально?
 

AnrDaemon

Продвинутый новичок
Потому что у тебя настройки трансляции кодировок кривые…
 

Yan

Новичок
Потому что у тебя настройки трансляции кодировок кривые…
А где эти настройки выставляются? Чтобы хоть на будущее знать.
Я писал вот это для каждой строки: $string = iconv("windows-1251", "UTF-8", $string);
Но это не помогало, вы это имеете ввиду?
 
Последнее редактирование:
Сверху