Ошибка с кодировкой в БД

Автор maxville, 23 февраля 2015, 20:21:49

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

maxville

Проблема такая:

- на форуме всё хорошо, русский шрифт отображается корректно (кодировка на форуму на cp1251, смотрел в языках).
- в БД - русский текст в виде иероглифов (бд кодировки utf8) (проверял SHOW GLOBAL VARIABLES LIKE 'char%';).

Если ничего не трогать то всё хорошо. Но хотелось бы привести БД в порядок, тк такого быть не должно.

Интернет уже перерыл, весь день этим занимаюсь. Ничего не помогает, может подход у меня не правильный? Посоветуйте что можно предпринять.

digger®

#1
Цитата: maxville от 23 февраля 2015, 20:21:49
Проблема такая:

- на форуме всё хорошо, русский шрифт отображается корректно (кодировка на форуму на cp1251, смотрел в языках).
- в БД - русский текст в виде иероглифов (бд кодировки utf8) (проверял SHOW GLOBAL VARIABLES LIKE 'char%';).

Если ничего не трогать то всё хорошо. Но хотелось бы привести БД в порядок, тк такого быть не должно.

Интернет уже перерыл, весь день этим занимаюсь. Ничего не помогает, может подход у меня не правильный? Посоветуйте что можно предпринять.

В чем именно ошибка? У вас форум в cp1251 и, наверняка, таблицы в БД тоже в cp1251. Если все нормально, можно ничего не предпринимать.
Думать о переходе на utf-8 нужно, но это отдельный вопрос.

maxville

нет, таблицы в бд как раз в utf-8 и выглядит всё печально



и если мне нужно куда-то портировать данные - то получается полная лажа. Поэтому в первую очередь хотелось бы привести БД в порядок.




digger®

Цитата: maxville от 23 февраля 2015, 21:49:32
нет, таблицы в бд как раз в utf-8 и выглядит всё печально
Приведенные скрины ничего не говорят о кодировке таблиц. На втором скрине дефолтная кодировка сравнения для всей базы, она может быть переопределена даже у отдельного поля в таблице.

maxville



это говорит о том что в бд utf8? :)

digger®

Цитата: maxville от 23 февраля 2015, 22:14:28


это говорит о том что в бд utf8? :)
Это говорит о том, что вы ошибочно считаете, что глобальные переменные оказывают какое-то влияние на реальные данные. Да, может таблицы в базе и в utf-8, а может в 1251, но от того, что вы смените этот character_set ничего в базе не изменится. В одной базе прекрасно могут одновременно существовать таблицы в куче разных кодировок. Клиент выставляет нужную кодировку соединения и правильно работает с данными в любой из кодировок.
Вы бы, лучше, форум отконвертировали в utf-8, отпал бы и этот вопрос за ненадобностью и от кучи проблем в будущем, заранее бы избавились.


maxville

под конвертацией форума в utf-8 это через админку smf?


maxville

А есть ли вероятность того, что после этой конвертации вообще кодировка слетит и всё будет в иероглифах?

digger®

Цитата: maxville от 23 февраля 2015, 22:38:21
А есть ли вероятность того, что после этой конвертации вообще кодировка слетит и всё будет в иероглифах?
Есть и достаточно высокая. Бэкапы всегда рулят.

maxville

нет, это не помогло. Весь форум был не читабельным. Восстанавливал бд. Пробовал еще через утилиту Sypex Dumper сохранять в одной кодировке, а восстанавливать в другой - в бд так же иероглифы, и как их привести в нормальный вид я не знаю.



maxville

Цитата: digger® от 03 апреля 2015, 17:15:00
Сделал.


Огромное спасибо digger'у за оказанную помощь, эта проблема с кодировкой давно мне покоя не давала (ТыЦ)

Теперь всё отлично. Одним гемором стало меньше. Рекомендую для решения подобных проблем обращаться к нему :)

karavan

Мне тоже Диггер менял кодировку, ато сам фиг там без бутылки разберешься, одно лечится другое калечится  wallbash

Yarik

Цитата: karavan от 03 апреля 2015, 22:49:36
Мне тоже Диггер менял кодировку, ато сам фиг там без бутылки разберешься, одно лечится другое калечится  wallbash
Запрос для конвертации базы не делали?


ALTER TABLE `db_name`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Данный запрос конвертирует базу в указанную кодировку, доступную для MySQL. Кроме этого потребуется конвертировать кодировку самих таблиц. Можно производить конвертацию таблиц по отдельности каждую, неудобство возникает при большом количестве таблиц.Это сделать посредством одного запроса.

SELECT CONCAT(  'ALTER TABLE `', t.`TABLE_SCHEMA` ,  '`.`', t.`TABLE_NAME` ,  '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) AS sqlcode
FROM  `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` =  'My_DB_for_convert'
ORDER BY 1
LIMIT 0 , 90

karavan


Yarik

Цитата: karavan от 03 апреля 2015, 23:24:20
Нет я в этом не спец.
Можно скачать хотя бы тот же самый денвер и там с таблицами и базами поупражнятся.
Я только сегодня сконвертил пару баз,всё удачно.Правда движек не SMF