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

  • Автор темы Автор темы Yan
  • Дата начала Дата начала

Yan

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

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

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

Выполнил, вот результат:


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

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

UPD: ой, винда. На винде в консоли с юникодом все тоже плохо. :) SQLYog-ом тогда, или DataGrip, или встроенным клиентом в phpstorm/webstorm/etc.
 
Последнее редактирование:
Всем спасибо за помощь, проблема решилась другим путем.
Суть была в том, что надо было спарсить файл, каждая строка которого выглядит примерно так: "240732";"CILIND. VLOŽEK 35-35 ISEO R6";0,00000;22,80000
Вот надо было разделить эту строку и записать все 4 значения по столбцам в БД. Я использовал explode(";", $value); И потом просто засовывал это в таблицу, сейчас решил функциями substr и strpos разбирать каждую строку и так частями записывать, это сработало, записало все символы È, Š и Ž корректно.
 
Последнее редактирование:
А твои классы это не глобальные переменные?…
Ты придираешься.
 
декларации, не путать с переменными. до тех пор пока psr-0 все ок
 
Бред.
Зачем так извращаться, когда есть http://php.net/manual/en/splfileobject.fgetcsv.php ?

Согласен, что бред, пришлось мучаться еще с этим, пока всю строку нормально разобрал, мне самому не нравится выход
Спасибо, почитаю об этом, потом попробую таким способом.
 
Но все же интересно, может кто знает, почему создание обычного массива $arr = file(file.txt) и его перебор приводит к кривой кодировке при записи в БД, а обычный разбор строки, все нормально?
 
Потому что у тебя настройки трансляции кодировок кривые…
 
Потому что у тебя настройки трансляции кодировок кривые…

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