Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Problem z kodowaniem w MySQL, szystkie polskie znaki zamiejają sie w ?
Coolmax
post 27.08.2006, 22:18:09
Post #41





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 12.11.2005
Skąd: Bulowice nearby Wadowice (E), Oświęcim (W)

Ostrzeżenie: (0%)
-----


Cytat(WereWolf @ 26.08.2006, 18:43 ) *
...
P.P.S. jeszcze jedno... krzaki po eksporcie pojawiają się tylko jeśli dane w bazie != ustawieniu charset dla komórek/bazy, jeśli już poradzimy sobie z przekonwertowaniem bazy np. z latin1 na latin2, to po eksporcie dane będą poprawne, tyle, że w przypadku nowego phpmyadmina znaki będą zawsze w utf8 (ale mogę się mylić), przy mysqldumpie chyba można wybrać kodowanie...


No właśnie - nie ma gdzieś w konfigu phpmyadmina, aby zmienić te kodowanie na iso-8859-2? Jeśli nie, to w ramach nauki napisze sobie skrypt konwertujący z utf na iso, a co będę ściągał jakiegoś gotowca smile.gif


--------------------
Go to the top of the page
+Quote Post
WereWolf
post 27.08.2006, 22:38:56
Post #42





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(Coolmax @ 27.08.2006, 21:18 ) *
No właśnie - nie ma gdzieś w konfigu phpmyadmina, aby zmienić te kodowanie na iso-8859-2? Jeśli nie, to w ramach nauki napisze sobie skrypt konwertujący z utf na iso, a co będę ściągał jakiegoś gotowca smile.gif

przyznam szczerze, że ja testując to co pisałem, używałem praktycznie tylko phpmyadmina zainstalowanego domyślnie na serwerze (serwery wirtualne), a co za tym idzie nie miałem dostępu do konfiga... raz zrobiłem wyjątek, przy testowaniu starszej wersji...

w każdym razie, jeśli chodzi o konfig, to faktycznie jakieś ustawienia są (default collation, default charset), ale trzeba by potestować metodą prób i błędów jakie ustawienie by zadziałało (podejrzewam, że zależy to też od ustawienia default character setu dla serwera itp.), bo mam dziwne przeczucie, że jeśli dane w bazie nie odpowiadają ustawieniu charsetu dla bazy, to znowu przy eksporcie pojawią się znaki zapytania... chyba metoda konwersji pliku po eksporcie jest pewniejsza
Go to the top of the page
+Quote Post
koskitos
post 8.11.2006, 22:46:03
Post #43





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


Mi się udało to załatwić bez problemu.
Wszystko jest na utf8_polish_ci
I raz dałem zapytanie: SET NAMES latin2
Eksportuje i imprortuje bez problemów. Zawsze z UTF-8. Tylko jeżeli mam baze zimportowaną ze starszego phpmyadmina to podczas importu zmieniam na latin1.

Jedyne co jest nie tak to, że w phpMyAdminie nie mam polskich znaków, a krzaki....

Udało sie komuś załatwić to, aby wszystko chodziło bez problemów łącznie z phpmyadminem?

Ten post edytował koskitos 8.11.2006, 22:54:18


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
Nevermore
post 9.11.2006, 20:58:51
Post #44





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 7.11.2005
Skąd: Różanka:>

Ostrzeżenie: (0%)
-----


U mnie w tej chwili na swiezo zalozonej bazie tez jest utf8_polish_ci i wszystko ladnie sie wyswietla takze w tym badziewiu, ktorego nazwy nie przytocze, zeby sie nie denerwowac. Ale to tak ladnie pieknie jest pewnie tylko dlatego, ze jeszcze nie musialam tej bazy uploadowac z backupu.
Go to the top of the page
+Quote Post
WereWolf
post 16.11.2006, 11:17:58
Post #45





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(koskitos @ 8.11.2006, 22:46:03 ) *
Jedyne co jest nie tak to, że w phpMyAdminie nie mam polskich znaków, a krzaki....

Udało sie komuś załatwić to, aby wszystko chodziło bez problemów łącznie z phpmyadminem?

jeśli w phpmyadminie masz krzaki, to znaczy, że masz ustawione złe kodowanie... tzn. przykłądowo, ustawienie collation i charset na latin1, a faktycznie przetrzymujesz w bazie dane kodowane pod latin2...

żeby w phpmyadminie widzieć znaki poprawnie, ustawienie kodowania dla bazy i dane zawarte w komórkach muszą się zgadzać...
Go to the top of the page
+Quote Post
koskitos
post 18.11.2006, 12:07:52
Post #46





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


WereWolf, wszędzie mam utf8_polish_ci, baza, tabele, komórki, wszystko.

Czyli jak powienienm to ustawić?


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
WereWolf
post 18.11.2006, 12:38:04
Post #47





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(koskitos @ 18.11.2006, 12:07:52 ) *
WereWolf, wszędzie mam utf8_polish_ci, baza, tabele, komórki, wszystko.

Czyli jak powienienm to ustawić?

a jakie dane trzymasz w bazie? tzn. w jakim kodowaniu?
Go to the top of the page
+Quote Post
koskitos
post 19.11.2006, 13:01:48
Post #48





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


Jakie dane? Hmmm... Dane są wprowadzane z formularzy ze strony. Wszystko jest ustawione na utf8_polish_ci, wiec to chyba ten typ...


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
WereWolf
post 19.11.2006, 13:13:29
Post #49





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(koskitos @ 19.11.2006, 13:01:48 ) *
Jakie dane? Hmmm... Dane są wprowadzane z formularzy ze strony. Wszystko jest ustawione na utf8_polish_ci, wiec to chyba ten typ...

no właśnie niekoniecznie...

kodowanie danych wprowadzanych z formularzy na stronie zależy od ustawień kodowania przeglądarki (i/lub charsetu ustawionego w meta-danych na stronie)

przykładowo jeśli na stronie używasz kodowania iso-8859-2, to w takim właśnie kodowaniu dane są przesyłane do bazy... wtedy nic dziwnego, że w phpmyadminie widzisz krzaczki, bo kodowanie danych nie zgadza się z ustawieniami w bazie...

a jeśli na stronie faktycznie używasz kodowania w utfie, to nie mam innego pomysłu...
Go to the top of the page
+Quote Post
koskitos
post 21.11.2006, 22:09:10
Post #50





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 18.04.2004
Skąd: Z nikąd

Ostrzeżenie: (30%)
XX---


Czyli w takiej sytuacji mam zmienić kodowanie strony na utf? Ale wtedy trzba coś kombinować przy wpisywaniu znaków?

Czy zmienić kodowanie bazy na jakieś inne, a jeżeli inne to jakie?


--------------------
kOskiToS :D
Go to the top of the page
+Quote Post
WereWolf
post 22.11.2006, 08:18:42
Post #51





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(koskitos @ 21.11.2006, 22:09:10 ) *
Czyli w takiej sytuacji mam zmienić kodowanie strony na utf? Ale wtedy trzba coś kombinować przy wpisywaniu znaków?

Czy zmienić kodowanie bazy na jakieś inne, a jeżeli inne to jakie?

jeśli wszystko na stronie działa normalnie, to nie musisz nic kombinować, jedynym błędem będą właśnie krzaki w phpmyadminie, dane wprowadzane przez phpmyadmina też mogą być później źle wyświetlane na stronie...

w praktyce, żeby wszystko działało jak należy, na stronie powinno być dokładnie takie samo kodowanie, jakie są ustawienia dla bazy, czyli jeśli na stronie masz iso-8895-2, to dla bazy powinno być ustawione kodowanie latin2... z tym, że to też nie takie proste zmienić po prostu kodowanie, bo wtedy pojawią się znaki zapytania w zapisach bazy, musisz to zrobić po kolei, np. tak jak opisywałem w poprzednich postach
Go to the top of the page
+Quote Post
GhOsT9
post 6.12.2006, 17:45:23
Post #52





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2005

Ostrzeżenie: (0%)
-----


Rowniez mam problem z krzakami, wiec sie dolacze...

Zalozylem sobie ambitny plan - zrobienie strony w 3 jezykach w 95% na bazie MySQL i w UTF8. Wszystkie podstrony i caly panel administracyjny maja charset=UTF-8. Baza danych jest ustawiona na utf8_unicode_ci (moge przestawic na utf8_general_ci ale tak i tak jest lipa).

Strona i baza stoja na hostingu - linux i MySQL 4.1.x

Po dodaniu tekstu z polskimi znakami, na stronie wyswietlaja mi sie krzaki w czesci liter ogoniastych. Tak samo w panelu przy edycji. Probowalem deklarowac kodowanie przy zakladaniu tabel w bazie: TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

Dodalem do skryptow dwie rzeczy:
na poczatku:

Kod
ini_set('default_charset', 'UTF-8');


i po polaczeniu z baza:

Kod
mysql_query('SET CHARACTER SET utf8');


Wciaz nie smiga a ja jestem w lesie. Strona ma wersje jezykowe PL, EN, DE, wszystkie jezyki sa zapisywane obok siebie w komorkach tabeli, np.

Kod
    pl                varchar(150)                   NOT NULL,
    en                varchar(150)                   NOT NULL,
    de                varchar(150)                   NOT NULL,


Formularze zrobilem na takiej zasadzie, ze przed dodaniem do bazy wpisuje sie wszystkie wersje jezykowe w jednym formularzu, analogicznie jak w sklepach opartych na oscommerce.

Po wielu eksperymentach, wciąż mam krzaki w części znaków.

Ma ktos patent jak to ustawic zeby smigalo bezproblemowo z trzema jezykami i bez krzakow?
Jaka odmiana kodowania UTF8 dla bazy (utf8_unicode_ci czy utf8_general_ci), jaki system porownan dla tabel i co dodac do skryptow php przed odczytem, dodaniem czy zmiana danych w bazie?
Go to the top of the page
+Quote Post
WereWolf
post 6.12.2006, 22:44:43
Post #53





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


to chyba oczywiste, ale na wszelki wypadek zapytam...

oczywiście na stronie masz w meta ustawionych charset utf8? smile.gif


Cytat
Jaka odmiana kodowania UTF8 dla bazy (utf8_unicode_ci czy utf8_general_ci)

to tylko systemy porównań (z tego co się orientuję), kodowanie i tak jest utf8, więc to raczej bez znaczenia


jeśli chodzi o zapytanie wysyłane po połączeniu z bazą to raczej powinno być:

  1. <?php
  2. mysql_query("set names 'utf8'");
  3. ?>


chyba to powinno wystarczyć... jeśli nie, to albo nie wszystkie kolumny mają ustawione kodowanie utf8, ustawienie ogólne dla bazy nie jest utf8, albo coś na samej stronie jest nie tak... nic więcej mi do głowy nie przychodzi
Go to the top of the page
+Quote Post
GhOsT9
post 11.12.2006, 12:24:05
Post #54





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2005

Ostrzeżenie: (0%)
-----


WereWolf:

dzięki za info. set names też przerabiałem, oczywiście, strona ma w meta utf-8.

założę bazę od nowa i pokatuję ponownie "set names".

edit:
cóż, nie do końca pomogło. mam set names, set character set. strona i baza w UTF8, tabela testowa w UTF8...
wszystkie ogoniaste poza "ń" są OK. duże Ń też jest ok... fajnie.

Ten post edytował GhOsT9 11.12.2006, 12:34:19
Go to the top of the page
+Quote Post
WereWolf
post 11.12.2006, 19:55:33
Post #55





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(GhOsT9 @ 11.12.2006, 12:24:05 ) *
cóż, nie do końca pomogło. mam set names, set character set. strona i baza w UTF8, tabela testowa w UTF8...
wszystkie ogoniaste poza "ń" są OK. duże Ń też jest ok... fajnie.

a gdzie konkretnie masz ten problem?

1. wyświetlanie "statycznych" tekstów na stronie
2. wyświetlanie tekstów z bazy:
- wyświetlanie pobranych tekstów z bazy na stronie
- wyświetlanie tekstu z bazy przez phpmyadmina?
Go to the top of the page
+Quote Post
woodzu
post 14.12.2006, 16:16:40
Post #56





Grupa: Zarejestrowani
Postów: 37
Pomógł: 3
Dołączył: 14.12.2006
Skąd: /usr/bin/php

Ostrzeżenie: (0%)
-----


Ja swój problem rozwiązałem wszędzie deklarując iso-8859-2 / latin2-general-ci

1. phpMyAdmin - 2.9.1.1

phpMyAdmin/index.php (linijka 98)
  1. <?php
  2. lang_iso_code = 'pl-iso-8859-2';
  3. ?>


phpMyAdmin/librares/config.default.php
  1. <?php
  2. // linijka 392
  3. $cfg['DefaultLang'] = 'pl-iso-8859-2';
  4.  
  5. // linijka 395
  6. $cfg['DefaultConnectionCollation'] = 'latin2_general_ci';
  7.  
  8. // linijka 400
  9. $cfg['Lang']  = 'pl-iso-8859-2';
  10.  
  11. // linijka 404
  12. $cfg['FilterLanguages'] = '';
  13.  
  14. // linijka 409
  15. $cfg['DefaultCharset'] = 'iso-8859-2';
  16. ?>


2. MySQL 5.0.22 (my.ini):

Kod
[client]
  default-character-set=latin2
[mysql]
  default-character-set=latin2
[mysqld]
  default-character-set=latin2


3. Apache/2.0.59 (Win32) (httpd.conf)

Kod
AddDefaultCharset ISO-8859-2


4. na stronie (index.php) oczywiście :

Kod
mysql_query ("SET NAMES latin2");
mysql_query (" SET collation_connection = latin2_general_ci ");

// oraz
  1. <html xml:lang="pl" lang="pl" xmlns="http://www.w3.org/1999/xhtml">
  2. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />


Z takiej konfiguracji eksportowałem już na serwer przez phpMyAdmin 2.7.0-pl2 ( MySQL 4.1 ) z ustawieniem "System porównań dla połączenia MySQL: latin2_general_ci" i jakiś inny serwer z utf8. Bezproblemowo się importowało i później eksportowało z tych serwerów.

Wszystko działa pięknie i wspaniale. Przy imporcie trzeba tylko zaznaczyć "Zestaw znaków dla pliku latin2", coby nie stracić ogonków. W strukturze bazy każdą kolumnę typu char/text mam z metodą porównywania latin2_genere_ci.


Stronę miałem wcześniej w ISO-8859-2. Kiedy podzieliłem ją na podstrony wstawiane przez funkcje reqiue_once () index.php został w tym kodowaniu, natomiast podstrony zapisywały się w WINDOWS-1250. To rozwiązał program Gżegżółka XP w kilka sekund. Więc strony miałem już czyste.

W PMA nie wyświetlają się żadne zbędne krzaki, można spokojnie dodawać i edytować rekordy.
Jedyny problem na jaki się napotkałem to PMA zmieniał literkę " ó " na "& oacute;". Tzn. w takiej formie zapisywał do bazy, ale na stronie było już " ó ". Tymczasowo rozwiązałem to przy odczycie z bazy funkcją ...

  1. <?php
  2. $zmienna = str_replace ( "& oacute;" , "ó" , $zmienna );
  3. ?>


... ale kombinuje dalej czemu wstawia się tak a nie tak jak być powinno. Macie może pomysły?

P.S.
Aha tak w sumie to witam wszystkich bo to mój pierwszy post na tym forum :]
Mam nadzieję że komuś się może przydać mój conig.

Pozdrawiam



Ten post edytował woodzu 14.12.2006, 17:03:43
Go to the top of the page
+Quote Post
WereWolf
post 14.12.2006, 19:55:54
Post #57





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(woodzu @ 14.12.2006, 16:16:40 ) *
Jedyny problem na jaki się napotkałem to PMA zmieniał literkę " ó " na "& oacute;". Tzn. w takiej formie zapisywał do bazy, ale na stronie było już " ó ".

hmm... a to ciekawe, z tym się nie spotkałem smile.gif

a zamieniane jest to tylko przy wprowadzaniu danych przez PMA, czy przez formularze na stronie też?
jeśli tylko przez PMA, to pewnie wina samego engine'u PMA... ale w niego się nie zagłębiałem, więc nie wiem smile.gif ogólnie używam go tylko do przeglądania danych od czasu do czasu (raczej rzadko), ewentualnie do poprawienia czegoś na szybko, albo wyszukania jakichś danych... wolę konsolę, ale nie zawsze jest do niej dostęp smile.gif
Go to the top of the page
+Quote Post
woodzu
post 14.12.2006, 21:09:33
Post #58





Grupa: Zarejestrowani
Postów: 37
Pomógł: 3
Dołączył: 14.12.2006
Skąd: /usr/bin/php

Ostrzeżenie: (0%)
-----


przez formularze też zamienia, zapomniałem tego dodać, gdyby zamieniał tylko przy wprowadzaniu danych z PMA to bym się tym tak nie przejmował, jak narazie to mój jedyny mankament

wnioskuje że to coś związane z kodowaniem samego MySQLa
Go to the top of the page
+Quote Post
hhg
post 14.12.2006, 21:31:02
Post #59





Grupa: Zarejestrowani
Postów: 316
Pomógł: 0
Dołączył: 5.07.2006

Ostrzeżenie: (0%)
-----


mysle ze powinno sie skorzystac z tego:
http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

tyle ze mam maly problem z zastosowaniem:
  1. SELECT CONVERT(_latin1'Müller' USING utf8);
  2. INSERT INTO utf8table (utf8column)
  3. SELECT CONVERT(latin1field USING utf8) FROM latin1table;


nie rozumiem co wstawic za _latin1'Muller'

wogole co oznacza co w tym zapytaniu??
Go to the top of the page
+Quote Post
WereWolf
post 14.12.2006, 23:11:09
Post #60





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

Ostrzeżenie: (0%)
-----


Cytat(hhg @ 14.12.2006, 21:31:02 ) *
tyle ze mam maly problem z zastosowaniem:
  1. SELECT CONVERT(_latin1'Müller' USING utf8);
  2. INSERT INTO utf8table (utf8column)
  3. SELECT CONVERT(latin1field USING utf8) FROM latin1table;

z tego co rozumiem:
CONVERT - nazwa funkcji
_latin1 - użyj kodowania _latin1 (traktuje tekst jako kodowany w latin1, nie zważając na domyślne ustawienia, albo ustawienia typu "set names")
'Muller' - tekst, ktory ma zmienic
USING - wiadomo
utf8 - kodowanie wyjściowe

w drugim wstawia do kolumny utf8column (jak przypuszczam ustawionej na utf8), konwertując w locie komórkę latin1field przy użyciu utf8 z tabeli latin1table...

nawet jeśli to działa tak jak ma działać, to jakoś nie jestem do tej metody przekonany smile.gif
powinno być raczej wszystko poustawiane tak jak miało być, czyli wszędzie jedno kodowanie - strona, ustawienia tabeli i w razie konieczności (jeśli serwer ma ustawione inne domyślnie używane kodowanie) - dodane po połączeniu z bazą zapytanie "set names 'kodowanie'", zwłaszcza, że zapytania typu _latin1'tekst' raczej nie są stworzone do takich zastosowań, a raczej do pojedynczych przypadków

druga sprawa... przy takiej metodzie, przy każdym zapytaniu do bazy następuje jakaś tam konwersja znaków - a to zawsze trochę trwa, przy niewielkiej stronie pewnie można by to pominąć, ale przy większej ilości zapytań już wzrasta obciążenie serwera

Ten post edytował WereWolf 15.12.2006, 07:16:16
Go to the top of the page
+Quote Post

4 Stron V  < 1 2 3 4 >
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: 26.06.2025 - 10:26