iBPlanet.pl

Witaj Gościu ( Zaloguj | Rejestruj )

 
Reply to this topicStart new topic
> System Porownac MySQL
mastercobra
post śro, 01 mar 2006 - 21:54
Post #1


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




Witam, w general config mam iso-8859-2 a w mysql nie ma takiego czegos i ciagle mam krzaki, nawet w nowych postach sa :/ co jest zle ? jakie ustawic zeby zniklo ? ta opcja porownan jest w phpmyadmin.


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
Senders
post pią, 03 mar 2006 - 14:45
Post #2


IBPlanet
Ikona grupy

Grupa: Moderatorzy
Postów: 1,049
Dołączył: pon, 05 gru 05
Skąd: IBPlanet.pl
Korzystam z IPB 3.0




Próbowałeś UTF-8, Latin2 ?


--------------------
Go to the top of the page
 
+Quote Post
mastercobra
post pią, 03 mar 2006 - 15:58
Post #3


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




UTF8 w ipb a latin 2 w mysql ? podaj wiecej informacji tongue.gif


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
mcstar
post wto, 14 mar 2006 - 22:45
Post #4


Stara się
*

Grupa: Użytkownicy
Postów: 16
Dołączył: czw, 23 lut 06




ja mam w Panelu ustawione kodowanie dla forum iso-8859-2 - i fakt zawsze - nie ma krzaczków w polskich znakach pobieranych z plików z polskim językiem, ale zawsze pojawiają się w postach - cóż wina porównać w MySQL-u u mnie od wieków we wszystkich skryptach (mambo, joompla, phpbb, IPB) działa jedno rozwiązanie - jeszcze nigdy mnie nie zawiodło. Jeśli chodzi o IPB 2.1.x to edytujesz plik class_db_mysql.php (ips_kernel->class_db_mysql.php) szukasz w nik czegoś takiego:

KOD
if ( $this->obj['persistent'] AND ! IPS_MAIN_DB_CLASS_LEGACY )
        {
            $this->connection_id = mysql_pconnect( $this->obj['sql_host'] ,
                                                   $this->obj['sql_user'] ,
                                                   $this->obj['sql_pass'] ,
                                                   $this->obj['force_new_connection']
                                                );

i zaraz pod tym wstawiasz:

KOD
mysql_query('SET character_set_connection=latin2', $this->connection_id);
mysql_query('SET character_set_client=latin2', $this->connection_id);
mysql_query('SET character_set_results=latin2', $this->connection_id);
mysql_query("set names latin2;");



później szukasz:
KOD
else
        {
            if ( IPS_MAIN_DB_CLASS_LEGACY )
            {
                $this->connection_id = mysql_connect( $this->obj['sql_host'] ,
                                                      $this->obj['sql_user'] ,
                                                      $this->obj['sql_pass']
                                                    );


i zaraz pod tym wstawiasz:

KOD
mysql_query('SET character_set_connection=latin2', $this->connection_id);
mysql_query('SET character_set_client=latin2', $this->connection_id);
mysql_query('SET character_set_results=latin2', $this->connection_id);
mysql_query("set names latin2;");



i w końcu:

KOD
else
            {
                $this->connection_id = mysql_connect( $this->obj['sql_host'] ,
                                                      $this->obj['sql_user'] ,
                                                      $this->obj['sql_pass'] ,
                                                      $this->obj['force_new_connection']
                                                    );


i pod tym:

KOD
mysql_query('SET character_set_connection=latin2', $this->connection_id);
mysql_query('SET character_set_client=latin2', $this->connection_id);
mysql_query('SET character_set_results=latin2', $this->connection_id);
mysql_query("set names latin2;");


nie ma bata przy ISO na stronie i standardowo zainstalowanym MySQL'u (tak jak ma prawie 100%) serwerów musi wszystko działać poprawnie!!


Fragment pliku który należy wyedytować u mnie po przeróbkach wygląda tak:

KOD
//-----------------------------------------
         // Connect
         //-----------------------------------------
         
        if ( $this->obj['persistent'] AND ! IPS_MAIN_DB_CLASS_LEGACY )
        {
            $this->connection_id = mysql_pconnect( $this->obj['sql_host'] ,
                                                   $this->obj['sql_user'] ,
                                                   $this->obj['sql_pass'] ,
                                                   $this->obj['force_new_connection']
                                                );
                mysql_query('SET character_set_connection=latin2', $this->connection_id);
                  mysql_query('SET character_set_client=latin2', $this->connection_id);
                  mysql_query('SET character_set_results=latin2', $this->connection_id);
                  mysql_query("set names latin2;");
        }
        else
        {
            if ( IPS_MAIN_DB_CLASS_LEGACY )
            {
                $this->connection_id = mysql_connect( $this->obj['sql_host'] ,
                                                      $this->obj['sql_user'] ,
                                                      $this->obj['sql_pass']
                                                    );
                mysql_query('SET character_set_connection=latin2', $this->connection_id);
                  mysql_query('SET character_set_client=latin2', $this->connection_id);
                  mysql_query('SET character_set_results=latin2', $this->connection_id);
                  mysql_query("set names latin2;");
            }
            else
            {
                $this->connection_id = mysql_connect( $this->obj['sql_host'] ,
                                                      $this->obj['sql_user'] ,
                                                      $this->obj['sql_pass'] ,
                                                      $this->obj['force_new_connection']
                                                    );
                mysql_query('SET character_set_connection=latin2', $this->connection_id);
                  mysql_query('SET character_set_client=latin2', $this->connection_id);
                  mysql_query('SET character_set_results=latin2', $this->connection_id);
                  mysql_query("set names latin2;");
            }
        }
        
        if ( ! $this->connection_id )



Bez tych zmian do bazy trafiają krzaczki -> więc choćby nie wiem jak cudować krzaczki i tak będą pobrane wink.gif Po zmianie podczas połączenia się bazą ustawia się "wymuszone" dobre kodowanie więc do bazy trafią polskie literki i takie też będą pobrane.


--------------------
Go to the top of the page
 
+Quote Post
mastercobra
post śro, 15 mar 2006 - 07:18
Post #5


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




dzieki, ja juz swoj problem rozwiazalem ale napisz to do artykulow, napewno sie komus przyda, u mnie musialem scignac mysql i rezcnie pozamieniac kodowanie z latin1 na latin2, poprzez EditPlus2 wink.gif
i potem ponownie ja wgrac pozdro.


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
mcstar
post śro, 15 mar 2006 - 13:23
Post #6


Stara się
*

Grupa: Użytkownicy
Postów: 16
Dołączył: czw, 23 lut 06




Fakt MySQL (nie pamiętam od której wersji) ma właśnie ten problem... że wszystkie tabele wrzuca jako latin1 - ja zanim zainstaluje skrypt na serwerze zawsze edytuje pliki gdzie są "komendy" dla SQL'a i zawsze na końcu każdego "rozkazu" (crate table) dopisuje ręcznie DEFAULT CHARSET=latin2; - w ten sposób mam pewność ze tworzą się dobre "polskie" tabelki wink.gif później to co napisałem w poście wyżej i nie ma problemów;) Wszystkie te zabiegi na 100% są nie potrzebna w MySQL 3 i pierwszych wersja MySQL 4, późniejsze wersje MySQL 4 i jak można się domyśleć MySQL 5 - mają troszke problemów z polskimi znakami i trzeba się chwilkę pobawić wink.gif

Ten post edytował mcstar śro, 15 mar 2006 - 13:24


--------------------
Go to the top of the page
 
+Quote Post
mastercobra
post pią, 15 gru 2006 - 14:43
Post #7


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




Witam, ponownie przenioslem baze i znow mam problem z krzaczkami a raczej pytajnikami bo wlasnie takie znaki sie wyswietlaja u mnie na forum.
W bazie mam kodowanie latin2 tam samo na forum i baza po otwarciu nie ma w sobie krzaczkow a polskie litery.
Czy ktos mial podobny problem ?
System porowna generlany w bazie mam utf-8 i nie moge zmienic, czy to jest problemem ?


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
mirc
post pią, 15 gru 2006 - 15:10
Post #8


master
Ikona grupy

Grupa: Administratorzy
Postów: 792
Dołączył: śro, 14 gru 05
Skąd: szczecin




znaki zapytania generalnie sa przez utf w ktorejs fazie
rozwiazanie przy exporcie bazy sprawdzic jakie sa ustawienia zmiennych polaczenia i wynikow z bazy a nastepnie przy wrzucaniu zrobic takie same wartosci przewaznie w tedy dziala
no jeszcze jest motyw ze phpmyadmin exporty robi w utf

zostaje metoda prob i bledow w tym zeby zadzialalo dobrze


--------------------
Insanity: doing the same thing over and over again and expecting different results.
Go to the top of the page
 
+Quote Post
mcstar
post pią, 15 gru 2006 - 15:12
Post #9


Stara się
*

Grupa: Użytkownicy
Postów: 16
Dołączył: czw, 23 lut 06




No jeśli używasz nadal IPB 2.1.x to rozwiązaniem problemu będzie wyedytowanie 1 pliku, troszkę wyżej masz napisane co trzeba wyedytować i co i gdzie dopisać. Jeśli masz już IPB 2.2 to zerknij do tego tematu (sprawa praktycznie taka sama, tylko trzeba zmienić 2 pliki): http://ibplanet.pl/index.php?showtopic=724...amp;#entry40835

Jeśli w bazie masz polskie litery, to nie ma się czym przejmować. Pozmieniaj pliki ustaw na forum ISO i musi wszystko działać.
(Generelanie edycja tego pliku(ów) sprowadza się do "wymuszenia" kodowania latin2 w połączeniu jakie ustala php z bazą, więc jeśli masz bazę w latin2 to wszystko będzie działać.)

Ten post edytował mcstar pią, 15 gru 2006 - 15:15


--------------------
Go to the top of the page
 
+Quote Post
mastercobra
post pią, 15 gru 2006 - 23:11
Post #10


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




czy aby to wymuszenie nie spowalnia pracy skryptu ? bo jednak za kazdym razem zajmuje pare ulamkow sekundy przez to ze server daje takie kodowanie a forum chce takie ?


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
mirc
post sob, 16 gru 2006 - 00:02
Post #11


master
Ikona grupy

Grupa: Administratorzy
Postów: 792
Dołączył: śro, 14 gru 05
Skąd: szczecin




kazde zapytanie do bazy powoduje jakies opoznienia to raczej jest oczywiste

tak w woli dygresji do tego wklejania w pliku od bazy to to wszystko wystarczy wkleic raz(ja mam tylko to i dziala jak trzeba)
KOD
mysql_query('SET character_set_server = utf8');
        mysql_query('SET collation_connection = utf8_general_ci');
        mysql_query('SET character_set_client = utf8');
        mysql_query('SET character_set_results = utf8');

przed
KOD
return TRUE;
    }
w function connect() . no oczywiscie kodowanie trzeba ustawic sobie odpowiednie

a teraz wrocmy do problemu to teoretycznie jako ze tabele w instalce/upgradzie nie maja wpisanego jakie maja charset collation to w przypadku tworzenia nowech tabel tworzone sa one z charsetem w jakim jest baza w ktorej sa one tworzone i teraz motyw z tym ze po upgradzie sie roznia wynikac moze tylko z tego ze baza nie jest od poczatku na tym serwerze tylko forum bylo przenoszone a jak wiemy phpmyadmin przy exporcie dodaje te wartosci do struktur tabel wiec nawet przy innym charsecie bazy do ktorej importujemy taki plik beda one mialy charset z poprzedniej bazy danych

jak sie nie rusza bazy i nie zmieniaja sie zadne zmiennne odnoszace sie do polaczenia zawsze bedzie dzialac dobrze


moze troche zakrecone ale sami mozecie przetestowac sobie w kazdej chwili tworzac np
SQL
CREATE TABLE tab1 (
wlog_id int(10) NOT NULL auto_increment,
wlog_mid mediumint(8) NOT NULL default '0',
wlog_notes text NOT NULL,
PRIMARY KEY (wlog_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE tab2 (
wlog_id int(10) NOT NULL auto_increment,
wlog_mid mediumint(8) NOT NULL default '0',
wlog_notes text NOT NULL,
PRIMARY KEY (wlog_id)
) ENGINE=MyISAM;


--------------------
Insanity: doing the same thing over and over again and expecting different results.
Go to the top of the page
 
+Quote Post
mcstar
post sob, 16 gru 2006 - 00:13
Post #12


Stara się
*

Grupa: Użytkownicy
Postów: 16
Dołączył: czw, 23 lut 06




Dokładnie każde zapytanie trochę spowolni, ale taka modyfikacja NIE spowolni na tyle żeby stało się to zauważalne. Jeśli napiszesz jakiegoś moda do forum, który będzie miał coś pobrać z bazy czyli wykonać SELECT to taki mod na 100% spowolni Ci skrypt bardziej niż ta modyfikacja wink.gif a mody wszyscy instalują i nawet się nad tym nie zastanawiają wink.gif

Co do wypowiedzi przedmówcy, zgadza się... wystarczy teoretycznie wkleić raz przed return TRUE, ale spotkałem się kiedyś z głosami że nie u wszystkich to zadziałało więc... zaproponowałem wersję, która już musi działać... - wybór oczywiście sam możesz dokonać. Tak czy owak nie obawiaj się tego że zostanie to wykonane w 1 przypadku 1 raz a w drukim 3 razy bo są if'y wink.gif i zawsze będzie to wykonane tylko jeden raz. I pamiętaj że jeśli masz tabelę w latin2 to musisz wstawić tak:
KOD
mysql_query('SET character_set_server = latin2');
        mysql_query('SET collation_connection = latin2_general_ci');
        mysql_query('SET character_set_client = latin2');
        mysql_query('SET character_set_results = latin2');


--------------------
Go to the top of the page
 
+Quote Post
mastercobra
post czw, 21 gru 2006 - 21:31
Post #13


Znawca
***

Grupa: Użytkownicy
Postów: 319
Dołączył: wto, 20 gru 05
Skąd: Belgia
Korzystam z IPB 2.3




a to tez pod 2.2.1 ?


--------------------


ha :P kupilem sobie licencje :D
Go to the top of the page
 
+Quote Post
mcstar
post czw, 21 gru 2006 - 21:50
Post #14


Stara się
*

Grupa: Użytkownicy
Postów: 16
Dołączył: czw, 23 lut 06




Tak można to użyć pod 2.2.1 bez najmniejszego problemu IPB nie wprowadziło jakiś radykalnych zmian do struktury plików odpowiedzialnych za łączenie się z MySQL'em od dłuższego czasu wink.gif


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: wtorek, 22 maj 2012 - 01:56