|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.06.2021, 12:14 | #1 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Кодировка БД CP1251, но данные записаны в UTF-8. Как исправить?
Возникла интересная ситуация. Есть сайт, сам сайт полностью работает в UTF-8. Однако БД имеет кодировку CP1251, и в такие строки записываются данные в UTF-8. Ожидаемо имеем в базе примерно следующее:
1.png Потребовалось перенести этот сайт на другой хостинг. Делаю экспорт БД через phpMyAdmin, ну и получаю вот такое: 2.png А надо все это безобразие привести в порядок. Вопрос в том, как мне получить нормальный дамп в кодировке utf-8? Я попробовал сделать следующее: выполнить дамп в кодировке 1251, а затем файл открыть как utf-8. Идея была верная, но что-то пошло не так: 3.png Видно, что уже появился нормальный русский текст, но почему-то буква "И" превратилась в "xD0?". В принципе можно сделать замену этих символов на буквы "И", но нет гарантий, что проблема только в букве "И". Может там и другие буквы также заглючат? Так вот, как восстановить файл, чтобы в нем не было таких вот ошибок? И почему именно с буквой "И" что-то пошло не так, хотя остальной русский текст нормально отображается? E-Mail: arigato.freelance@gmail.com
|
30.06.2021, 17:31 | #2 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 967
|
Arigato, СУБД какая?
вот тут меняют кодировку в таблицах в мускуле https://www.reg.ru/support/hosting-i...tablic-v-mysql |
30.06.2021, 20:30 | #3 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Не, к сожалению, это не работает. Тут просто меняется кодировка таблиц. А проблема в том, что таблицы были в 1251, но в них записывались данные в UTF-8. Надо именно перекодировать данные, а не просто сменить кодировку таблиц. Там сейчас в самих таблицах белиберда, если поменять кодировку, то белиберда никуда не денется.
Суть в том, что база данных в 1251, при подключении к MySQL тоже устанавливается кодировка в 1251, но весь сайт в utf8. В итоге сайт в принципе как бы работает, просто utf8 строки записываются в таблицы с кодировкой 1251 (записываются в виде ерунды, которая была показана выше на скриншотах). Потом из них же данные читаются, и на сайте они отображаются корректно. Но мне нужно привести все это дело в порядок, чтобы через phpMyAdmin видеть нормальные строки в базе, а не закарючки. E-Mail: arigato.freelance@gmail.com
|
30.06.2021, 20:37 | #4 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 967
|
Arigato, у меня похожая беда с птицей 1.5 - база в 1251, но понадобилось хранить имена юзеров в utf8. Я туда текст загоняю, обратно тоже достаётся нормально (то есть, внутри программы то всё ок), но ibexpert показывает белиберду. Я на это просто забил.
Но можно же точно также поступить и сконвертировать - вычитать все поля, интерпретировать их как utf8. Затем пересоздать всю БД и записать всё правильно. Возможно, это всё делается более умно, но я пока что не знаю, как ) |
30.06.2021, 21:40 | #5 | |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Цитата:
Вот хотелось бы легкое решение найти. Можно, конечно, написать скрипт, который все данные перегонит, но ведь куда проще просто пересохранить файл дампа в другой кодировке. Однако непонятно, почему некоторые буквы (в частности, буква "И") ломаются. Зато другой русский текст прекрасно восстановился. E-Mail: arigato.freelance@gmail.com
|
|
30.06.2021, 22:33 | #6 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,501
|
В notepad++ открой дамп, и перекодируй с учётом BOM
|
12.07.2021, 22:08 | #7 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Так и делал, итог:
Завтра опять вернусь к этой задаче. Попробую букву "И" автозаменой восстановить. Главное чтобы другие буквы не пострадали. P.S. Хм, xD, это же 13, если в десятичной системе, то есть перевод строки. Кажется, есть намек на проблему - переводы строки перекодировались, в итоге в кодировке UTF-8 буквы, в коде которых есть 13, поломались. Осталось понять, как бы скачать файл без изменений в переводах строк, тогда должно все корректно открыться в кодировке UTF-8. Ну или таки ручная замена. E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 12.07.2021 в 22:12. |
13.07.2021, 08:13 | #8 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 967
|
Arigato, 13 - это 0x0D , а тут 0xD0
|
16.07.2021, 17:51 | #9 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Замена этих символов на букву "И" помогла, вроде других косяков в кодировке нет, и база нормально восстановилась. Правда Notepad++ такие символы заменять отказался, пришлось написать маленькую программульку, которая их позаменяла прямо в файле.
Непонятно только, почему вообще эта проблема вылезла... E-Mail: arigato.freelance@gmail.com
|
17.09.2022, 14:55 | #10 |
Новичок
Джуниор
Регистрация: 17.09.2022
Сообщений: 1
|
а зачем вообще нужна тогда кодировка для таблиц и бд, как вы думаете?
думал, что записи при запросе подвергаются какой-то перекодировке, а получается, что пишет utf в таблицу с кодировкой cp1251... т. е. нет перекодировки, тогда зачем вообще таблице она? ну какой от нее смысл тогда? у меня просто что-то похожее, решил поискать в инете и толком ответа то не нашел в чем этот прикол тогда... мож подскажете... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перекодировка DBF файла из cp1251 в UTF-8 | .scu | C# (си шарп) | 7 | 14.07.2012 02:04 |
Кодировка по умалчанию UTF-8 | Bockarevs | HTML и CSS | 7 | 11.11.2010 17:16 |
Кодировка с cp1251 на utf8 в MySQL | Droid | БД в Delphi | 1 | 13.03.2010 16:43 |
кодировка UTF-8 | nimf | Общие вопросы Delphi | 4 | 18.01.2009 19:25 |
UTF-8 кодировка | OrdJONY | Общие вопросы Delphi | 2 | 23.03.2008 16:56 |