Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kodowanie MySQL inne niż ISO
Forum PHP.pl > Forum > Bazy danych
Qrzysio
Witam.

Od dłuższego czasu mam spory problem, z którym nijak nie potrafię sobie proadzić. Otóż mam bazę danych, która nie posiada kodowania ISO.
W PHPMyAdmin mam napisane:

System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)

System porównań dla połączenia MySQL: Tutaj mam listę do wyboru z opcjami takimi jak tu www.krzysiek.moja-ostroleka.pl/kodowanie_mysql.htm

Problem tym, że nie wiem za bardzo co wybrać. Kombinowałem z róznymi ustawieniami, ale bez większego efektu. Problem polega na tym, że gdy skrypt php przeszukuję baze danych to problem pojawia się z polskimi znakami. Najczęściej tylko z ś,Ś,ł oraz Ł.

Czy jest jakieś ustawienie które kodowałoby mi polskie znaki normalny sposób? Bo aktualnie mam takie hieroglify w bazie:

ż = ¿
ł = ³
ę = ê
ą = ±
Ł = £
ś = ¶
ń = ñ
ź = ¼
ć = æ
Ż = ¯


Chyba że jest inny sposob na omienicie takich problemow? kodowanie formularza, zmienic kodowanie strony (aktulanie jest iso-8859-2).

Poradźcie coś bo już mi włosy wypadają.
sobstel
jest juz kilka watkow na ten temat. sproboj na pocztaku skryptu wywolac zapytanie "SET NAMES latin2".
luukaas
Ja bym spróbował jeśłi masz w MySQL ' u kodowanie utf-8 dać na stronie również utf-8.
Nie wiem jakie są możliwości MySQL ' a pod wzgledem takich obiektow w bazie jak procedury skladowane czy funckje, ale moglbys napisac funckje lub procedure konwersji pomiedzy kodowaniem na stronie i kodowaniem w bazie , zamieniajac w slowie wejsciowym polskie znaki ze strony np '±' na 'ą'.
Pozdrawiam
jedrus4
Cytat(Qrzysio @ 2005-05-14 09:40:41)
Tutaj mam listę do wyboru z opcjami takimi jak tu www.krzysiek.moja-ostroleka.pl/kodowanie_mysql.htm

ustaw z tej listy:
latin2_general_ci
u mnie pomogło
Qrzysio
Hmm nie bardzo. Po zmienieniu w bazie na latin2 _general_ci i tak nadal są te same krzaczki.

Mam wyszukiwarkę i poza tym, że literka ą wygląda tak ±, to poprawnie działa wyszukiwanie wyrazu, klątwa. Niestety znalezienie wyrazu KLĄTWA już nie działa. Myślałem zeby wyszukiwać tylko małe litery, ale tytuły nie mogą byc tylko z małych liter.... poza tym php i tak nie zamienia poprawnie małego ś na wielkie Ś itp.

Może pomogłoby wprowadzenie w znaczniku FORM paramteru kodowania charset.... widziałem takie cudo na jakiejś stronie, ale nie wiem czy to działa tak jak bym tego chciał. Poza tym nie wiem jakie kodowanie podać??
Ace
Cytat(sopel @ 2005-05-14 12:53:07)
jest juz kilka watkow na ten temat. sproboj na pocztaku skryptu wywolac zapytanie "SET NAMES latin2".

u mnie tez byl taki problem, przenosilem dane z mysqla 4.1.x na serwer 4.1.11 i krzaki mialem nie wiadomo czemu... Ale jak uzywalm tego zapytania jako pierwszego zapytania wyslanego do mysqla, to jest ok. Wraca wszystko do pozadku.
Qrzysio
Jak dokładnie wywołać to zapytanie?
Ace
mysql_query( ... ); ? snitch.gif
pabbito
Zaraz po zapytaniu łączącym z bazą zrób:
  1. <?php
  2. mysql_query(&#092;"set names latin2;\");
  3. ?>

w phpmyadmin mam ustawione utf8 i utf_general_ci
i wszystko jest ok.
Ale tez miale podobny problem jak wy przy przenoszeniu bazy na inny serwer. Po exporcie i pozniej imporcie byly krzaki.

Doszedlem do tego ze przy tworzeniu tabel koniecznie trzeba podac sposób kodowania i collation
  1. CREATE TABLE IF NOT EXISTS `zn_kolory` (
  2. `Id_zk` int(6) NOT NULL AUTO_INCREMENT,
  3. `Symbol` varchar(8) DEFAULT NULL,
  4. `Kolory` enum('czerwony','żółty','niebieski','zielony') NOT NULL DEFAULT 'czerwony',
  5. `Pelne` enum('TAK','NIE') NOT NULL DEFAULT 'TAK',
  6. PRIMARY KEY (`Id_zk`)
  7. ) TYPE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
orson
witam ...

ale sama zmiania (z tego co pamiętam) nic nie daje ... dane musisz wgrać jeszcze raz przez połączenie w danym kodowaniu ... czyli tworszysz nową bazę (lub zmieniasz istniejącej) kodowanie na utf i potem przez połączenie z bazą też w utf (lub latin2_general_ci - btw: ci znaczy case insensitive - czyli jak zrobisz wszystko ok to nie będzie miało znaczenia czy to Ą czy ą, znajdzie) wsadzasz dane ... potem pobierasz już normalnie ...

pozdrawiam
Qrzysio
Już traciłem nadzieję, ale działa!!

Pozostaje tylko pytanie jak w jakiś w miare szybki sposób "przekonwertować" te wszystkie krzaczki na polskie znaki? Bo ręcznie to z miesiąc mi to zajmie....


EDIT:

Jeszcze jedno pytanie: Gdy wykonałem następujący skrypt:

  1. <?php
  2. ?php
  3. mysql_query(&#092;"SET NAMES latin2;\");
  4. ?>


to jest u wszystko okej. A jaka wartość SET NAMES była przed wykonaniem komendy? jak to sprawdzić?
sobstel
Cytat
A jaka wartość SET NAMES była przed wykonaniem komendy? jak to sprawdzić?


SHOW CREATE TABLE lub SHOW CREATE DATABASE

Cytat
Pozostaje tylko pytanie jak w jakiś w miare szybki sposób "przekonwertować" te wszystkie krzaczki na polskie znaki? Bo ręcznie to z miesiąc mi to zajmie....


wyeksportuj baze i uzyj opcji Zatsap tekst dowolnego edytora i potem zrob z powrotem import
Qrzysio
Problem w tym że edytorem sie nie da. Polskie znaki w bazie danych to "?" a jak zrobię eksport i edytuję w edytorze textu to wiadomo ze bedzie traktowal kazdy znak zapytania jako taki wlasnie znak i nie rozrozni ktory ? powinien być ż, który ą itp. Trzeba by było wykonac to od razu na bazie danych. Chyba ze masz jakies dobre narzedzie/notatnik questionmark.gif
sobstel
a nie masz wersji bazy sprzed koncwersji?
Qrzysio
Niestety sad.gif

Strukturę mam taką, że tylko dwa pola muszą być latin, reszta moze byc w standardowym - staram sie wlasnie wydobyc jak sie nazywa to standardowe ustawienie. Dzieki temu bede mogl wyswietlac w latin a czesc w tym standardowym


EDIT: jednak chyba nie będzie to proste sad.gif Chyba pozostaje mi porpawienie błędów (krzaczków)...
pabbito
Cytat(Qrzysio @ 2005-06-02 11:39:12)
Problem w tym że edytorem sie nie da. Polskie znaki w bazie danych to "?" a jak zrobię eksport i edytuję w edytorze textu to wiadomo ze bedzie traktowal kazdy znak zapytania jako taki wlasnie znak i nie rozrozni ktory ? powinien być ż, który ą itp. Trzeba by było wykonac to od razu na bazie danych. Chyba ze masz jakies dobre narzedzie/notatnik questionmark.gif

prawdopodobnie miales kodowanie utf-8 , otworz w jakims edytorze ktory czyta takie kodowanie np PSPAD (polecam)
Qrzysio
Niestety nie pomaga - chyba że się nie znam. Jesliby się komuś chciało sprawdzić to plik z kopią bazy danych jest tutaj:

www.krzysio.us/forum/wypozyczalnia_baza_filmow.rar

Częśc rekordów została poprawiona ale to kropla w morzu tego co trzeba poprawić.
orson
witam

a szukałeś u źródła questionmark.gif dev.mysql.com questionmark.gif można tam znaleść:
http://dev.mysql.com/doc/mysql/en/set-option.html oraz
http://dev.mysql.com/doc/mysql/en/show.html
a rozwiązaniem twojego problemu jest: http://dev.mysql.com/doc/mysql/en/charset-convert.html ... czyli:
jeżeli nie masz ściągasz mysql 41 lub nowsze instalujesz, importujesz do testowej tabeli, sprawdzając czy w importowanej bazie NA PEWNO JEST STARE (ZLE) KODOWANIE exclamation.gif, zakładasz nową pustą tabelę z poprawnym kodowaniem (np. utf-8)
potem robisz zapytanie:
  1. INSERT
  2. INTO utf8table (utf8column)
  3. SELECT CONVERT(latin2field USING utf8)
  4. FROM latin2table;
które przeniesie ci do końcowej tabeli ... trochę roboty ale jak już puścisz zapytanie to samo ci zrobi wszystko ...

ps. co do znaków zapytania - one tylko tak się wyświetlają chyba ... w bazie powinno być ok.
snowjedrzej
Pozwolicie, ze dalej pociagne ten watek. Ja mam taki problem:

Musze eksportowac pliki ze starego serwera na nowy.

Na starym serwerze mam:
- PHPMyAdmin 2.3.2,
- MySQL 4.0.24
-język PHPMyAdmin ustawiony na polish (charset pl-iso 8859-2).

Na nowym sererze mam:
- PHPMyAdmin 2.6.1pl-3,
- MySQL 4.1.11, language polish (pl-utf-8 ),
- system kodowania znaków dla MySQL: UTF-8 Unicode (utf8),
- system porównań dla połączenia MySQL: utf8_general_ci.

Eksportuje baze ze starego serwera, uzyskuje ja w pliku .php. Probuje zrobic import z tego pliku na nowy serwer i wtedy mniej wiecej polowe tabel udaje mi sie wgrac, ale bez polskich znakow (same krzaki) a reszty tabel nie udaje mi sie w ogole wgrac od momentu gdy mi sie pojawia blad:

MySQL zwrócił komunikat:

#1062 - Duplicate entry 'u' for key 1

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in (...)


PROBLEM JEST W KODOWANIU ZNAKOW poniewaz SQL odbiera moje zapytanie

INSERT INTO phpbb_search_wordlist VALUES ('użytkowników', 1004, 0) - tak jest napisane w pliku


jako INSERT INTO phpbb_search_wordlist VALUES ('u?ytkownik󷧬1004, 0) - znika końcówka ów' (i w tym ten apostrof - a to generuje blad).

Robilem juz z moim plikiem w ktorym mam wyeksportowana baze wszystko. Zamienilem kodowanie w Notatniku na utf-8 a wtedy w ogole nie udalo mi sie przeprowadzic nawet czesci importu bo pojawil sie jakis niestworzony blad:

Błąd
zapytanie SQL:

# phpMyAdmin MySQL-Dump
# version 2.3.2
# http://www.phpmyadmin.net/ (download page)
#
# Host: mysql.ibc.pl
# Czas wygenerowania: 16 Cze 2005, 21:28
# Wersja serwera: 4.00.24
# Wersja php: 4.3.10
# Baza danych : `baza2`
# --------------------------------------------------------
#
# Struktura tabeli dla `dane`
#
CREATE TABLE dane(

user_id smallint( 3 ) unsigned NOT NULL AUTO_INCREMENT ,
login varchar( 12 ) NOT NULL default '',
imie varchar( 15 ) NOT NULL default '',
nazwisko varchar( 30 ) NOT NULL default '',
firma varchar( 30 ) NOT NULL default '',
email varchar( 40 ) default NULL ,
ulica varchar( 30 ) NOT NULL default '',
kod mediumint( 6 ) NOT NULL default '0',
miasto varchar( 30 ) NOT NULL default '',
haslo varchar( 12 ) NOT NULL default '',
ostatnie_logowanie datetime NOT NULL default '0000-00-00 00:00:00',
obecne_logowanie datetime NOT NULL default '0000-00-00 00:00:00',
ilosc_kontraktow tinyint( 3 ) NOT NULL default '0',
PRIMARY KEY ( user_id )
) TYPE = MYISAM
MySQL zwrócił komunikat:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '# phpMyAdmin MySQL-Dump
# version 2.3.2
# http://www.phpmyadmin.net/ (downl' at line 1


podczas gdy skladnia jest, jak widac poprawna.



Czy moglibyscie mi pomoc? Będę bardzo wdzięczny, pozdrawiam.

Jędrzej
Dynuel
a wiecie moze w ogole jakie kodowania trzeba ustawić w php, apache i mysql'u (najnowszych wersjach), aby polskie znaki dzialaly?? i gdzie to sie ustawia?? dzięki
radek31
Witam,

ja sobie wszystko przekonwertowalem ...
ale niestety mam problem tylko i wylacznie z literka "Ł"
czyli przy odczycie i zapisie zawsze wkladane jest to samo ...
tragedia ...

sam juz nie wiem co zrobic ..

moze ktos ma jakis pomysl ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.