Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: MySql + кодировки  (Прочитано 5378 раз)

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

Оффлайн t_a_n_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
MySql + кодировки
« : 23 Апреля 2008, 15:07:51 »
Доброго всем  дня!

Поиском не осилил, решил сюда. Суть вопроса: делаю дамп базы в mysql под виндой, копирую в комп с Ubuntu 7.10, ну и в phpmyadmin уся кирилица отображается в виде вопросов.
Танцы с бубном ни к чем не привели, подскажите куда копать.

Заранее спасибо.

is_a

  • Гость
Re: MySql + кодировки
« Ответ #1 : 23 Апреля 2008, 15:11:05 »
 :coolsmiley: В сторону постгреса

по теме: проверить настройки кодировки по умолчанию для базы.

Оффлайн t_a_n_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #2 : 23 Апреля 2008, 15:34:12 »
:coolsmiley: В сторону постгреса

по теме: проверить настройки кодировки по умолчанию для базы.
Обнаружил еще вот что: смотрю дамп базы встроеным редактором... есно краказябры, открываю в локали cp-1251 - нормально, кирилицу видит. делаю импорт базы в phpmyadmin указывая кодировку файла cp-1251, после импорта в phpmyadmin показывает нормально, на моем сайте - знаки вопроса вместо кирилицы, глянул html код:
в phpmyadmin стоит <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
у меня <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
поменял у себя на charset=utf-8 и все равно знаки вопроса :((((((((((((

зы какую кодировку выставить базе чтоб нормально отображалась и импортировалась кирилица?
зыы что за зверь постгрес?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #3 : 24 Апреля 2008, 06:48:21 »
t_a_n_k, вылазь уже из танка/поезда (нужное подчеркнуть)

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

Каждая база имеет свою кодировку. это раз.
Независимо от этого каждая страничка инетовская имеет свою кодировку. это два.
Видимо для того чтобы все работало они должны совпадать. это три. (только не говори что ты это знал, если бы знал сам бы все десть раз сделал)
Видимо раз ты вообще нифига не знал про кодировки, твоя база на виндовом мускуле писалась в cp1251

Солюшн №1:
1) ты грохаешь всю фигню что там наковырял в юниксовом мускуле
2) заново заводишь базу с ПРАВИЛЬНОЙ кодировкой.
3) проверяешь чтобы твой дамп из виндовой базы был в той самомй кодировке
4) льешь дамп на сервер.
5) проверяешь что все работает

P.S. если я где-то ошибся это твои проблемы, включай мозги.

Оффлайн t_a_n_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #4 : 24 Апреля 2008, 08:28:00 »
Yurror, раз ты такой умный подскажи че делать то

Вот я беру дамп в кодировке cp-1251, создаю базу на убунте в кодировке cp-1251, лью туда дамп...
Теперь смотрю в phpmyadmin - кирилица нормально. Смотрю свой сайт - ненормально.
Как так???

Оффлайн Nebulosa

  • Активист
  • *
  • Сообщений: 397
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #5 : 24 Апреля 2008, 09:46:04 »
Видимо раз ты вообще нифига не знал про кодировки, твоя база на виндовом мускуле писалась в cp1251
Очень даже не cp1251,  а может очень даже монструозный latin1  ;) От этого и проблемы.

t_a_n_k, есть несколько вариантов получить желаемое:
1) способ на авось: если есть доступ к папке баз данных под виндой, по почему бы их не попробовать просто копирнуть? Из mysql/data в /var/lib/mysql. Версии mysql же одинаковые?..

2) способ "джедайский": снимаем полный дапм со структурой таблиц и данными
   а) на винде с помощью утилиты mysqldump (она лежит в mysql/bin), пароль рута мы знаем, значит - mysqldump.exe -x -A -uroot -p[root_pass_here] --add-drop-table  -c > dump.sql
   б) через phpmyadmin, http://localhost/phpmyadmin/server_export.php как там есть, (выделить все, Добавить DROP DATABASE, Добавить DROP TABLE / DROP VIEW, упаковать - нет, имя файла dump )

затем  mysqldump -uroot -p[root_pass_here] < dump.sql

Эти два способа не трогают кодировки (ну опять же phpmyadmin может накосячить, тут надо аккуратней), а переносят базы в том виде в каком они есть. Есть еще пара способов, но тут надо четко знать с какой кодировкой работаешь и какую надо получить.

Лучше конечно когда кодировка в базе, в таблицах, в соединении и на сайте - utf8, но почему то разработчики mysql выбрали latin1 :idiot2:

Оффлайн CyberFox

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #6 : 24 Апреля 2008, 10:29:42 »
В php:
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251;");
Или используй свою кодировку. Также можно указать в /etc/mysql/my.cnf в секции [mysqld] параметр
default-character-set = utf8 (или своя кодировка)

Оффлайн t_a_n_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #7 : 24 Апреля 2008, 15:33:54 »

Вставил код - заработало
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251;");

добавил в my.cnf строку default-character-set = cp1251, ребутнул мускул sudo /etc/init.d/mysql restart  - болт, так не хочет

ЗЫ почему то везде пишут  /etc/init.d/mysqld а почему то у меня такого нет, тока /etc/init.d/mysql

Оффлайн t_a_n_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #8 : 24 Апреля 2008, 16:02:50 »
Ура! Победил!
Добавил еще строки
[client]
default-character-set = cp1251

[mysqld]
default-character-set = cp1251
character-set-server = cp1251
collation-server = cp1251_general_ci
init-connect = "SET NAMES cp1251"
skip-character-set-client-handshake

[mysqldump]
default-character-set = cp1251

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Re: MySql + кодировки
« Ответ #9 : 26 Апреля 2008, 02:20:54 »
Каждая база имеет свою кодировку. это раз.
Независимо от этого каждая страничка инетовская имеет свою кодировку. это два.
Видимо для того чтобы все работало они должны совпадать. это три. (только не говори что ты это знал, если бы знал сам бы все десть раз сделал)
Видимо раз ты вообще нифига не знал про кодировки, твоя база на виндовом мускуле писалась в cp1251
Не знаешь - не надо советы давать.


 

Страница сгенерирована за 0.038 секунд. Запросов: 25.