Printable Version of Topic
Click here to view this topic in its original format |
Forums > Глюкодром > Php-nuke + MySQL, Кодировка |
Posted by: ego on 27-10-2005, 17:04 | ||
Есть проблема ,может кто сталкивался На сервере в MySQL 4.1.10a в phpMyAdmin 2.6.4-pl1 по умолчанию выставлена кодировка UTF-8 Unicode (utf8) Когда я заливаю базу данных из PHP-Nuke 7,9 рус которая в кодировке win cp1251 то в итоге получаю всю нюку в знаках вопросов.Пытался менять кодировку в nuke.sql (посоветуйте прогу для этого я делал ИЕ). В файле db.php после запроса к базе добавил } $db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false); mysql_query("SET NAMES 'cp1251'"); if(!$db->db_connect_id) { тоже не помогает Сопоставление соединения с MySQL: тоже выставлял нужную кодировку.Когда саму базу заливал тоже указывал нужную кодировку файла. Даже незнаю что делать.Изменить кодировку по умолчанию нельзя потому как там еще бегает вобла которая нормально работает UTF-8 Unicode (utf8) кодировкой и если изменить то форум будет тогда весь в вопросиках тоже. Хостер сказал мол
После заливки базы все таблицы в latin1_swedish_ci.Я гдето читал что можно сразу всей базе или таблицам поменять кодировку в phpMyAdmin я такой опции не нашел. Поможет ли если изменить во всех полях кодировку вручную? Вот теперь незнаю что делать,нужна именно эта нюка на сайте. На предмет вопроса гуглил уже,ничего толкового не нашел http://fanguru.com/index.php (http://fanguru.com/index.php |
Posted by: irage on 27-10-2005, 17:41 |
mysql_query ("set character_set_client='cp1251'", $link); mysql_query ("set character_set_results='cp1251'", $link); mysql_query ("set collation_connection='cp1251_general_ci'", $link); |
Posted by: ego on 27-10-2005, 17:49 | ||
Спасибо за отклик вставил
неправильный аргумент говорит,вставил только первый тоже самое толко в 95 строке убрал переменную , $link получил Parse error: parse error, unexpected $ in /home/fanguru/domains/fanguru.com/public_html/db/db.php on line 80 |
Posted by: ego on 27-10-2005, 17:59 |
вот на всяк случ весь файл А что за переменная $link ? <?php /*************************************************************************** * db.php * ------------------- * begin : Saturday, Feb 13, 2001 * copyright : (C) 2001 The phpBB Group * email : support@phpbb.com * * Id: db.php,v 1.10 2002/03/18 13:35:22 psotfx Exp * * ***************************************************************************/ /*************************************************************************** * This file is part of the phpBB2 port to Nuke 6.0 (c) copyright 2002 * by Tom Nitzschner (tom@toms-home.com) * http://bbtonuke.sourceforge.net (http://bbtonuke.sourceforge.net (or http://www.toms-home.com) (http://www.toms-home.com) * * As always, make a backup before messing with anything. All code * release by me is considered sample code only. It may be fully * functual, but you use it at your own risk, if you break it, * you get to fix it too. No waranty is given or implied. * * Please post all questions/request about this port on http://bbtonuke.sourceforge.net (http://bbtonuke.sourceforge.net first, * then on my site. All original header code and copyright messages will be maintained * to give credit where credit is due. If you modify this, the only requirement is * that you also maintain all original copyright messages. All my work is released * under the GNU GENERAL PUBLIC LICENSE. Please see the README for more information. * ***************************************************************************/ /*************************************************************************** * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * ***************************************************************************/ if (stristr($_SERVER['PHP_SELF'], "db.php")) { Header("Location: index.php"); die(); } if (defined('FORUM_ADMIN')) { $the_include = "../../../db"; } elseif (defined('INSIDE_MOD')) { $the_include = "../../db"; } else { $the_include = "db"; } switch($dbtype) { case 'MySQL': include("".$the_include."/mysql.php"); break; case 'mysql4': include("".$the_include."/mysql4.php"); break; case 'sqlite': include("".$the_include."/sqlite.php"); break; case 'postgres': include("".$the_include."/postgres7.php"); break; case 'mssql': include("".$the_include."/mssql.php"); break; case 'oracle': include("".$the_include."/oracle.php"); break; case 'msaccess': include("".$the_include."/msaccess.php"); break; case 'mssql-odbc': include("".$the_include."/mssql-odbc.php"); break; case 'db2': include("".$the_include."/db2.php"); break; } $db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); if(!$db->db_connect_id) { die("<br><br><center><b>Извините за временное неудобство.<br><br>Есть проблема с Базой Данных $dbtype сервера.<br><br>Мы скоро вернемся.</center></b>"); } ?> |
Posted by: irage on 27-10-2005, 20:02 |
$link - это id соединения с базой. Попробуй заменить $link в моем примере на $db. |
Posted by: Uzaren on 27-10-2005, 20:19 | ||
Создай файл .htaccess в нём напиши вот это
И положи его в диру где лежит Nuke |
Posted by: irage on 27-10-2005, 20:22 | ||||
![]() Уз, это тонкая шутка??? |
Posted by: ego on 27-10-2005, 20:51 |
irage не помогло c $db ![]() Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/fanguru/domains/fanguru.com/public_html/db/db.php on line 95 ................. я так понял эти запросы для того чтобы он с базой правильно работал,тоесть брал в правильной кодировке и отдавал.Но в самой базе у меня все latin1_swedish_ci.Может чего не так заливается.Локально у меня все окей с денвером а вот серваке не сложилось там мускул новее и phpMyAdmin. Я локально сделал дамб,залил, вся таблица в поле сравнения была как положено cp1251 но вопросики не исчезли ![]() Uzaren это наверно для браузера? |
Posted by: Set on 27-10-2005, 21:41 |
Попробуй "SET CHARACTER SET utf8" в SQL |
Posted by: irage on 27-10-2005, 22:07 | ||
Не боись, разберемся. Я тебе давал пример для родных функций PHP для работы с MYSQL, судя по всему нюк использует еще один способ, аналог ODBC. То что база по умолчанию в swedish не должно быть проблемой, самое главное всадить три SQL запроса сразу после функции соединения с базой. Можно попробовать вместо $link использовать $db, только всадить это надо после этого куска:
Именно здесь переменной $db присваивается идентификатор соединения. По любому, если не получится я сейчас подчитаю описание функций и твою проблему решим. |
Posted by: irage on 27-10-2005, 22:36 |
чего то я не могу найти 6-ю версию, они уже 7-ку раздают. Запость содержание mysql4.php плиз. |
Posted by: Uzaren on 27-10-2005, 22:41 | ||
Или я что-то не так понял? |
Posted by: ego on 27-10-2005, 23:02 | ||
спасибочки irage ты меня обнадежил,мне даже неудобно. ![]() тут (http://www.phpnuke.ru/modules.php?name=Files&go=view_file&lid=718 версия нюки 7.9 тут (http://fanguru.com/test/mysql4.rar только mysql4.php добавлено
ничего опустил за } получил Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/fanguru/domains/fanguru.com/public_html/db/db.php on line 98/99/100 |
Posted by: ego on 27-10-2005, 23:18 | ||||
![]() Я пробовал не то |
Posted by: irage on 27-10-2005, 23:57 | ||||
Хм. ООП. Это конечно хоорошо, но не всегда я люблю ООП. Можно попробовать так (это кусок mysql4.php):
так вот, можно перед последней строкой $this->query_result = mysql_query($query, $this->db_connect_id); вставить:
|
Posted by: ego on 28-10-2005, 00:26 |
вставил,круто ![]() Огромное тебе спасибо irage .Эххх когда руки до самого пчп доростут.Пока только в нюке с горем пополам и с помощью ![]() теперь пишет на русском и читает новые посты тоже на русском....но с самой базой всеравно что то не так ![]() Но это уже хорошо,всеравно буду там все менять потихоньку |
Posted by: irage on 28-10-2005, 00:52 | ||
|
Posted by: ego on 28-10-2005, 00:55 |
все просто... сейчас пишу посты и все такое все пишется хорошо.Все что касаемо самой нюки веб формы и все такое тоже гуд.А вот то что изначально типа первые посты на главной меню которые в базе сидят все в вопросах,щас если захожу меняю на русс все ок Может всетаки саму базу надо было переделать? |
Posted by: ego on 28-10-2005, 01:10 |
хм... создал юзера с русским именем,так немогу теперь ним залогинится,неужто что то всетаки не так ![]() в таблице вместо русского юзера и его данных кракозябры убрал все изменения опять создал юзера всеравно кракозябры А нельзя ли как всю базу пока она маленькая перегнать в нормальную кодировку? Я пробовал в ютф8 с помощью ИЕ.Оно не помогало может есть другие способы какие? тут похожая трабла они чего то там с базой делали (http://www.forum.slavhost.ru/about122-0-asc-45.html |
Posted by: ego on 28-10-2005, 14:02 |
вот прошелся еще раз по сайтам,в одном месте сказали то базу нужно заливать в latin1 тоесть указать такую кодировку файла,прошло на ура хотя во всех мануала пишут что именно cp1251 Только в базе кракозябры если например делаю юзера с русским именем.Но в самой нюке все ок. если так mysql_query ("set character_set_client='latin1'"); mysql_query ("set character_set_results='latin1'"); mysql_query ("set collation_connection=' latin1_swedish_ci'"); то ничего,пишет кракозябры в базу если вставляю mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); то получаю знаки вопросов на главной |
Posted by: ego on 29-10-2005, 19:42 | ||
вобщем решил я это дело тоесть отображается на русском и на сайте и в базе для этого я вставил В файле mainfile.php (выделено жирным)
и воспользовавшись дампером от нюки перелил базу и онеа получила нужное сравнение тоесть cp1251_general_ci Спасибо всем за помощь |
Posted by: ego on 04-11-2005, 02:03 |
всетаки решили мы выставить кодировку по умолчанию а то каждый раз копаться в коде напрягает и бекап выходит с каракулями Подскажите что написать вместо CREATE TABLE в базе INSERT или UPDATE чтобы заменило то что есть и не ругалось на то что такие таблицы уже существуют? вот решил сделать бекап базы ввожу в шел [эго@55 ~]# mysql -u юзер -p forumjoy_forum>/home/forumjoy/backup.sql; Enter password: после ввода пасса молчание и создается файл нулевой длины,что не так? |
Posted by: irage on 04-11-2005, 03:12 | ||
И почему ты с базой из шелла работаешь? Удобней использовать какой-нибудь менеджер вроде EMS MySQL manager или phpMyAdmin на крайний случай. |
Posted by: ego on 04-11-2005, 04:37 |
шелл это все что есть)) phpMyAdmin у него там органичение на заливаемую базу в 2 мега.А например Мускул Администратор не пускает сервак.Сервер рабочий я стремаюсь туда ставить что попало,юзаю то что есть)) Я сделал бекап,имею проблемы с кодировками,страшное дело.Пытаюсь поправить но штирлиц на 15 мегах виснет,в линуксе есть куча прог но например коменты к таблицам пишет на русском а контент ячеек на русском кракозябры. Вот после снятия бекапа все там CREATE TABLE стоит,тоесть чтобы откатиться нужно стереть все.А я хочу просто заменить то что есть в файле запросов. Ну вот просто этой командой я хотел через шел сделать бекап того что есть но выходит файл пустой может я чего не так написал? |
Posted by: FiL on 04-11-2005, 04:44 |
бакап делается коммандой mysqldump. |
Posted by: ego on 04-11-2005, 05:12 |
FiL спасиб,понял ![]() |
Posted by: Uzaren on 04-11-2005, 10:41 |
А ещё есть классный скрипт, котрый делает бекап, много раз им пользовался, всё очень просто и удобно. Скачать (http://zapimir.net/skdumper/download/sk_dumper_106.zip Все подробности и описания здесь Site Keeper Dumper LE (http://zapimir.net/skdumper/ ![]() ![]() |
Posted by: ego on 04-11-2005, 17:16 |
Uzaren да я тоже его обнаружил ,спасибо |
Posted by: ego on 05-11-2005, 08:15 |
может кто подскажет какой запрос к мускулу надо выполнить чтобы изменить поле Сравнение с latin1... на cp1251_general_ci во всей таблице сразу. |
Posted by: irage on 05-11-2005, 12:07 | ||||
только CHAR(1) поменяй на структуру твоего поля. |
Posted by: ego on 05-11-2005, 22:33 | ||
тоесть я могу дать команду одной таблице и мне нужно ввести все поля а что такое CHAR( 1 ) я несовсем понял.... я может неправильно высказался...имя поля я имел это название столбца "сраגвнение" К примеру есть таблица,нужно Везде изменить ,тоесть везде где я вижу в столбце эту кодировку latin1.Я я похожую команду в мануале видел к мускулу,пойду гляну. ![]() |
Posted by: obaldin on 06-11-2005, 00:44 | ||
UPDATE таблица SET Сравнение='cp1251' ? |
Posted by: ego on 06-11-2005, 01:01 | ||||
![]() звание штатного телепата потверждаю ![]() |
Posted by: irage on 06-11-2005, 01:05 | ||
ты написал
обрати внимание на последнее слово - поле это не таблица. Что просил, то и получил ![]() |
Posted by: irage on 06-11-2005, 01:11 | ||
Ах да, забыл совсем:
|
Posted by: ego on 06-11-2005, 01:21 |
хех,спасибо всем за помщь и терпение ![]() Хех,да я понял уже что лажанулся ![]() |
Posted by: obaldin on 06-11-2005, 01:50 | ||||
![]()
|
Posted by: FiL on 06-11-2005, 02:01 | ||
|
Posted by: ego on 06-11-2005, 16:48 | ||||
вы уж извените мне мои ламерские выпады,тольго постигаю азы этого,так что вполне может быть непонятка с трактовками ![]()
Есть база данных форума вобла.В ней таблицы разные никак неполучается изменить чарсет везде где только можно.Когда устанавливаю воблу он автоматом ставит тот чарсет который по умолчанию на мускуле.Может когда устанавливаю форум в файле mysql-schema.php дето добавить чарсеты?Вот фрагмент
|
Posted by: ego on 06-11-2005, 17:07 | ||
|
Posted by: Set on 06-11-2005, 18:29 |
Для мускула есть родные утилиты с нормальным GUI: MySQL Administrator, MySQL Query Browser. В них можно посмотреть какие запросы и как. |
Posted by: ego on 06-11-2005, 21:19 | ||
Эх ,решили мы ваще его переставить этот мускул.Поставить версию постарее,меня еще интересует он ведь как то там завязан с разными прогами типа дайректадмин и пчп,после переустановки непотянет ли он все за собой. |
Posted by: irage on 06-11-2005, 22:08 | ||||
В phpmyadmin чарсеты прекрасно меняются для чего угодно, не знаю в чем у тебя проблема. Вот что я бы попрбовал. Так как ты умеешь изменять чарсет у базы, можно сделать так. 1. Создаешь базу для своего нюка с нуля. При создании или сразу после указываешь нужный чарсет и collate. 2. Судя по содержимому mysql-schema.php чарсеты у тебя явно не указаны, поэтому помоему они должны унаследоваться от родительской базы. |
Posted by: ego on 06-11-2005, 22:30 |
попробую,спасибо |
Posted by: Set on 06-11-2005, 23:11 | ||||
|
Posted by: ego on 06-11-2005, 23:28 |
да на десктопе есть и клиент и все остальное,работает все без танцев с бубнами |
Posted by: ego on 08-11-2005, 02:50 | ||
непомогает ,в принудительной таблице создается все ок у все полей правильная кодировка но... все теперь в вопросиках пошло... в вовбле нашел такую вот опцию в конфиг.пчп ,но тоже не помогает
Посмотрел на серваке нет никаких файлов для чарсетов,в смысле /usr/local/mysql4/share/charsets нету такого,вот и получается что значит на серваке и не может быть никаких кодировок кроме ютф8 |
Posted by: Brait on 08-11-2005, 05:37 | ||||||
Это полный аналог группы команд:
Судя по всему, у vB работа с базой вынесена в отдельный класс. Найди его, и в функции соединения с базой, после вызова mysql_connect(), выполни mysql_query("SET NAMES 'cp1251'"). Только поосторожней, там может оказаться всяческая проверка на правильность соединения и т.д. Тогда команду лучше поставить уже после проверки... В результате у тебя скрипт будет отправлять данные в windows-1251 (set_client), сервер будет работать с данными в режиме windows-1251 (set_connection), база хранит данные в windows-1251 (настройка CHARACTER SET базы), и скрипт будет получать данные в windows-1251 (set_results). Пробуй, должно работать. |
Posted by: ego on 08-11-2005, 09:38 | ||
очевидно в этой переменной и стоит вся команда раз просят внести самую малость причем же написано что мол только для новых баз с которыми проблемы.Буду ковыряться дальше. Дампером снимается бекап и заливается обратно все ок.Тоесть на форуме все выглядит чин чинарем а вот в базе самой каракули. |