Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL: Проблема с кодировками

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

alexanod

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD
Большое спасибо все заработало!

Всего записей: 32 | Зарегистр. 14-02-2005 | Отправлено: 06:38 12-10-2006
n0px

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теперь у меня проблемы с базой. Все в нее сохраняется виде '???"? тему прочитал но ничего не получается. Пробовал в самой базе менять текст - но тогда на странице он приобретает вид крякозяб.
 
Нашел момент о в котором происходит обращение к базе (вроде именно о нем идет речь).
 

Код:
 
 if (!empty($this->port)) $argHostname .= ":".$this->port;
        
        if (ADODB_PHPVER >= 0x4300)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                                                $this->forceNewConnect,$this->clientFlags);
        
        else if (ADODB_PHPVER >= 0x4200)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                                                $this->forceNewConnect);
        else
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);
    
        if ($this->_connectionID === false) return false;
        if ($argDatabasename) return $this->SelectDB($argDatabasename);
        return true;    
 
 
Но вот куда вставлять строку о которой говорил UncoNNecteD я не пойму.
Пробовал вставить между If'ами но тогда страница вообще перестала грузиться
mysql_query("set CHARACTER SET utf8");
Подскажите пожалуйста.
 

Всего записей: 69 | Зарегистр. 22-10-2005 | Отправлено: 14:44 21-10-2006
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
 
   
 if (!empty($this->port)) $argHostname .= ":".$this->port;
         
        if (ADODB_PHPVER >= 0x4300)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                                                $this->forceNewConnect,$this->clientFlags);
         
        else if (ADODB_PHPVER >= 0x4200)
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
                                                $this->forceNewConnect);
        else
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);
mysql_query("set CHARACTER SET cp1251");            
        if ($this->_connectionID === false) return false;
        if ($argDatabasename) return $this->SelectDB($argDatabasename);
return true;    
 
 


----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 14:47 21-10-2006
n0px

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет это не помогло, текст по прежнему пишется знаками вопросов  
Попробовал записать в саму базу через phpmyadmin в кодировке win-1251 и я впервые увидел русские шрифты на странице. Но когда я пытаюсь записать через cms то все по прежнему преобразуется в '???'

Всего записей: 69 | Зарегистр. 22-10-2005 | Отправлено: 15:15 21-10-2006 | Исправлено: n0px, 15:26 21-10-2006
zapimir



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нужно писать  

Код:
 if (!empty($this->port)) $argHostname .= ":".$this->port;  
         
        if (ADODB_PHPVER >= 0x4300)  
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,  
                                                $this->forceNewConnect,$this->clientFlags);  
         
        else if (ADODB_PHPVER >= 0x4200)  
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,  
                                                $this->forceNewConnect);  
        else  
            $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);  
         
        if ($this->_connectionID === false) return false;
        mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error());
        if ($argDatabasename) return $this->SelectDB($argDatabasename);  
return true;  

 
Такой вариант будет работать на всех версиях MySQL. Если этого не достаточно будет, то скорее всего у тебя неправильные кодировки у таблиц выставлены. Посмотри в phpmyadmin в списке таблиц какие у них кодировки стоят, если есть latin1, то нужно поправить, в этом случае поможет дампер 1.0.8 и эта инструкция.

Всего записей: 651 | Зарегистр. 28-10-2001 | Отправлено: 19:23 21-10-2006
n0px

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал все по инструкции - проблема осталась.
Если я в самой базе вписываю текст в Western  (ISO-8859-1) то текст выводится на странице правильно, хотя в теле странице указана кодировка "UTF-8".  
Если же пытаюсь записать в любой иной кодировке то выводятся крякозябы.
 
Может ли это быть баг  самой cms? Хотя ISO-8859-1 работает нормально...
Если в самой cms печатаю в кодировке ISO-8859-1 то все сохраняется знаками вопроса. %)  
 
Если печатаю в том же utf-8 в самой базе то в ней все сохраняется правильно, а выводится хрен знает как

Всего записей: 69 | Зарегистр. 22-10-2005 | Отправлено: 23:01 21-10-2006 | Исправлено: n0px, 23:12 21-10-2006
zapimir



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для начала поясни что в твоем понимании означает
"Если я в самой базе вписываю текст в Western (ISO-8859-1)" это как?
 
Ты посмотрел в phpmyadmin, в списке таблиц, столбик Сравнение, там у всех таблиц установлено cp1251_...? Так как судя по симптомам у тебя проблема именно в кодировке таблиц.

Всего записей: 651 | Зарегистр. 28-10-2001 | Отправлено: 03:07 22-10-2006
n0px

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zapimir
 
> "Если я в самой базе вписываю текст в Western (ISO-8859-1)" это как?  
 
Это я в браузере (FireFox2) переключаю кодировку на данную и в ней ввожу.
 
> Ты посмотрел в phpmyadmin, в списке таблиц, столбик Сравнение, там у всех таблиц >установлено cp1251_...? Так как судя по симптомам у тебя проблема именно в >кодировке таблиц.
 
Слушай не подскажешь мне глупому где это поле находится? Я посмотерел все заголовки полей но ничего похожего на "comparison" не нашел.
 
http://img245.imageshack.us/img245/9247/1zp1.png
http://img180.imageshack.us/img180/3974/2yf0.png
 
Или быть может я не там смотрел?

Всего записей: 69 | Зарегистр. 22-10-2005 | Отправлено: 11:35 22-10-2006 | Исправлено: n0px, 11:36 22-10-2006
zapimir



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
n0px

Цитата:
Слушай не подскажешь мне глупому где это поле находится? Я посмотерел все заголовки полей но ничего похожего на "comparison" не нашел.

А какая версия MySQL?

Цитата:
Это я в браузере (FireFox2) переключаю кодировку на данную и в ней ввожу.

Куда именно вводишь в phpmyadmin или cms?

Всего записей: 651 | Зарегистр. 28-10-2001 | Отправлено: 16:19 23-10-2006
n0px

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Версия MySQL-клиента: 4.1.10
 
Ввожу в phpmyadmin

Всего записей: 69 | Зарегистр. 22-10-2005 | Отправлено: 18:10 23-10-2006
zapimir



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Версия MySQL-клиента: 4.1.10

Смотреть нужно не версию клиента, а версию сервера.
В общем выполни SQL запрос:
 
SHOW TABLE STATUS
 
Там смотри колонку Collation.

Всего записей: 651 | Зарегистр. 28-10-2001 | Отправлено: 19:55 23-10-2006
S0ldier



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня была похожая проблема... Решил так:
- Выставил в phpMyAdmin кодировку cp1251_general_ci
- Сохранением дамп БД в кодировке Win1251
- Восстановил дамп через окно SQL-запроса
 
Добавлено:
Ах да, после CREATE TABLE [...] прописал:

Код:
ENGINE=MyISAM DEFAULT CHARSET=cp1251

Всего записей: 3230 | Зарегистр. 18-01-2005 | Отправлено: 19:36 27-10-2006
eugrus



UNIX-like Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Инструментарий:
на старом месте cpanel
на новом месте cpanel, phpmyadmin
 
Проблема:
была база в кодироке cp1251, дамп был сохранён в utf-8 через cpanel на старом месте
 
такое извращение естественно дало невозможность её прочесть в каком-либо редакторе, iconv -f utf-8 -t cp1251 спотыкается
 
на новом месте база должна быть также cp1251
 
импорт через cpanel даёт в результате одни знаки вопроса

----------
IT-Recht Blog

Всего записей: 5471 | Зарегистр. 17-06-2004 | Отправлено: 22:26 18-03-2007 | Исправлено: eugrus, 22:29 18-03-2007
chaugi



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день,
 
Устал бороздить просторы интернета, поэтому решил обратиться сюда.
Вначале краткая предистория, потом сформулирую проблему с кодировкой баз данных.  
1. Стоял форум phpbb на MySQL 4.1.20, в базе collation было utf8_general_ci. Сам форум отображался с кодировкой UTF-8. Всё было в полном порядке.
2. Мигрировал на этом же сервере только на новый формуный движок vBulletin 3.6.7 PL1 при помощи ImpEx 1.81. Т.е. просто скопировались соответствующие поля из одних таблиц в другие. Никакой перекодировки! Таблицы для нового форума тоже имеют collation utf8_general_ci. Проверял через phpmyadmin содержимое таблиц одинаково, т.е. миграция прошла успешно без всяких осложнений.
 
Результат:  
- на новом форуме при установленной кодировке UTF-8 всё отображается нормально!
 
Проблема:  
- vBulletin использует кодировку ISO-8559-1 для работы с базой данных и всего прочего, а сам форум отображается с установленной кодировкой Windows-1251.
- Если поменять в header'e charset на UTF-8 остаеётся только одна проблема. Дело в том, что когда я создаю новый пост движок форумя, судя по всему, введённую информацию интерпретирует как ISO-8559-1, а не как UTF-8, в результате у меня нет больших букв Р и Э, вместо них только �* значки.
 
Решение: Т.к. решил не разгребать движок форума решил просто перекодировать базу данных в ISO-8559-1 (Latin1) чтобы форум отображался нормально с кодировкой Windows-1251.
 
Вот беда, но не получается у меня нормально сконвертировать и поменять эти кодировки.
Я думал что нужно сделать дам через МойАдмина и полученный UTF-8 файл перекодировать в ISO-8559-1, но это не приносит желанного результата. Т.к. если импортирую обратно форум отображается неверно.
 
   
 
Так выглядит дамп если его открыть как UTF-8 чем он и является. 192- это старый пост, который при кодировке броузера UTF-8 отображается корректно.
193 - новый пост, который при кодировке Windows-1251 отображается нормально.
 
Помогите пожалуйтса.
Как всётаки существующую базу с кодировкой информации в UTF-8 перекодировать в ISO-8859-1?

Всего записей: 321 | Зарегистр. 16-03-2002 | Отправлено: 11:02 10-06-2007 | Исправлено: chaugi, 11:02 10-06-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chaugi
Если я правильно понял, вы хотите перекодировать даные с кириллицей из UTF-8 в ISO-8559-1(при этом, на сколько я понял, collation останется utf-8?), что бы отображать их потом в Windows-1251 ?!?! Имхо, это высшая степень извращения.  
 
В бд даные должны хранится в той кодировке, для которой стоит collation, причем не важно будет это utf-8, cp1251 или iso-8559-5. В какой кодировке работать уже на самом форуме, вы можете решить сами, для этого надо только перед началом работы с бд выполнить запрос
Код:
SET NAMES 'кодировка_с_которой_хотим_работать'
соответственно, писать скрипты в этой же кодировке и выдавать заголовок с этой кодировкой. Все, и не надо никаких танцев с бубном.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 12:11 10-06-2007
chaugi



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr

Цитата:
Если я правильно понял, вы хотите перекодировать даные с кириллицей из UTF-8 в ISO-8559-1(при этом, на сколько я понял, collation останется utf-8?), что бы отображать их потом в Windows-1251 ?!?! Имхо, это высшая степень извращения.

Совершенно верно, единственный нюанс - я могу спокойно поменять collation на latin1. Т.е. сделать SQL дамп, перекодировать содержимое, заменить utf8_general_ci на latin1_swedish_ci, сделать обратно экспорт.
 

Цитата:
для этого надо только перед началом работы с бд выполнить запрос
Код:
SET NAMES 'кодировка_с_которой_хотим_работать'
соответственно, писать скрипты в этой же кодировке и выдавать заголовок с этой кодировкой.

Хорошо, если форум написан и заточен для ISO-8559-1, есть ли шанс вписав одну строчку  SET NAMES 'кодировка_с_которой_хотим_работать' заставить всё работать с UTF-8?
 
Спасибо.

Всего записей: 321 | Зарегистр. 16-03-2002 | Отправлено: 21:05 10-06-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Хорошо, если форум написан и заточен для ISO-8559-1, есть ли шанс вписав одну строчку  SET NAMES 'кодировка_с_которой_хотим_работать' заставить всё работать с UTF-8?  

Что вы имеете ввиду, под "заточен для ISO-8559-1"? В нем явно перекодируются все данные извне в ISO-8559-1? Или просто дело в том, что он не умеет работать с мультибайтовыми кодировками? Во втором случае будет достаточно использовать любую однобайтовую кодировку кириллицы, либо при использовании UTF-8 подключить mbstring и в настройках включить замену всех стандартных строковых функций аналогами mbstring
Но, скорее всего, у вас проблема именно в том, что по дефолту MySQL работает с кодировкой latin1 (вне зависимости от collation), т.е. все входящие данные он перекодирует из latin1 в кодировку collation-а и наоборот. Что бы исправить эту оплошность достаточно сразу после коннекта к базе выполнить запрос, который я написал выше. Если честно, я не смотрел как устроен vBulletin, но уверен, что этой одной строчки будет достаточно, что бы работать с нужной кодировкой.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 21:28 10-06-2007
Syllion

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема с кодировкой, на англоязычной CMS. На старинице текст отображется кракозябами.
 
в базу текст ложится в виде

Код:
INSERT INTO `eb_articles` VALUES(1, 0, 1, 1214146644, '123', '<p>1233333333333333333333333333333333333333333333333</p>\r\n<p>666666666666666666</p>', 1, 0);
INSERT INTO `eb_articles` VALUES(2, 2, 1, 1214147437, '123', '<p>1970Âàñÿ</p>\r\n<p>òåñò</p>', 1, 0);
 

На старинце все выглядит так
 
http://shup.com/Shup/47038/Untitled.png
 
В HTML кодировка указана явно
<meta http-equiv="Content-Type" content="text/html; charset=win-1251" />
 
В графе "Сравнение" в PHPMyAdmin значится cp1251_general_ci
Вот дам с SQL (он короткий)
http://codepad.org/cQJ7Rrd9
 
Как можно исправить баг с кодировкой?

Всего записей: 194 | Зарегистр. 07-06-2007 | Отправлено: 20:13 22-06-2008 | Исправлено: Syllion, 20:15 22-06-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Syllion

Цитата:
На старинце от выглядит как
 
Код:
1970&#210;&#229;&#241;&#242;
 
&#234;&#229;&#237;&#234;
 
565&#240;&#240;&#240;&#240;&#240;&#224;&#224;&#224;&#224;

раз так выглядит, то это не 1251..
либо применяется htmlentities

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:15 22-06-2008
Syllion

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
да, в коде встречается "htmlentities"

Всего записей: 194 | Зарегистр. 07-06-2007 | Отправлено: 20:18 22-06-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL: Проблема с кодировками


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru