Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kodowanie bazy i polskich znaków w UNICODE
maknus
post
Post #1





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

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


Witam

Czy jest jakaś funkcja/ustawienie które pozwoli mi kodować bazę danych tak aby polskie znaczki zapisywane były w postaci np: "&#260 ;" zamiast Ą . Wiem że mogę zrobić to z poziomu php wyszukując polskie znaki w stringu i zamieniać na ich numeryczną postać ale jeśli tekst byłby długi to taka funkcja trochę czasu by trwała. Czy jest możliwość zrobienia tego z poziomy bazy danych??

Z góry dziękuję z podpowiedź.

Ten post edytował maknus 31.01.2011, 10:50:11
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Przede wszystkim pamiętaj o tym, że kodowanie musi być wszędzie zgodne (utf8), to znaczy takie samo w skrypcie php, takie samo w bazie i takie samo na stronie. Odnośnie kodowania w bazie to poszczególne kolumny tekstowe (najlepiej całe tabele) powinny mieć ustawione kodowanie z rodziny utf8_XXX_ci/utf8_XXX_cs, gdzie XXX może być jednym z ciągów: general, polish, unicode. Czyli np. utf8_general_ci. Jeśli chodzi o funkcje w php pomagające zachować jednolite kodowanie:

  1. utf8_encode(string $data);
  2. iconv_set_encoding("internal_encoding", "UTF-8");
  3. iconv_set_encoding("output_encoding", "UTF-8");

Pamiętaj też, że samo kodowanie skryptu php powinno być utf8 bez znacznika bom (byte of mark), można,a nawet trzeba to ustawić (jeśli nie jest ustawione) w edytorze, z którego korzystasz, a jeśli nie, to zmień edytor.
// edit
w mysql są funkcje
  1. character SET utf8
  2. SET names utf8


Ten post edytował darko 31.01.2011, 10:51:08
Go to the top of the page
+Quote Post
maknus
post
Post #3





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

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


Dzięki za podpowiedź ale z kodowaniem znaków na stronie nie mam problemów. Chodzi o to, iż mam dodatkową aplikację która pobiera dane z bazy mysql i ona potrzebuje aby polskie znaki były kodowane w sposób "&#260 ;" zamiast Ą itd.. bo inaczej tego nie obsłuży. Chciałbym to zrobić na poziomie bazy danych, aby polskie znaki zapisywane były w takim formacie ("&#260 ;" zamiast Ą). Myślałem nad zrobieniem procedury, która by robiła podmianę i triggera, który by tą procedurę wywoływał po insercie. Ale nie wiem czy to najlepszy pomysł (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Lepiej to zrobić już w samej aplikacji w php, gdyż dane poprawnie zakodowane w bazie mogą się przydać w innym celu:
  1. $text = 'ąĄćĆęĘłŁńŃóÓśŚźŹżŻ';
  2. array('ą', 'Ą', 'ć', 'Ć', 'ę', 'Ę', 'ł', 'Ł', 'ń', 'Ń', 'ó', 'Ó', 'ś', 'Ś', 'ź', 'Ź', 'ż', 'Ż'),
  3. array('ą','Ą','ć','Ć','ę','Ę','ł','Ł','ń','Ń', 'ó','Ó','ś','Ś','ź','Ź','ż','Ż'),
  4. $text);

Powinno się dać jeszcze prościej to zrobić za pomocą jakiejś funkcji, której nazwy niestety nie pamiętam w tym momencie.
Sorry ale chyba nie da się tutaj tego wkleić, bo niepoprawnie wyświetla, w każdym razie ta druga tablica składa się z elementów zaczynających się od ampersandu i hasha, a kończy średnikiem, a pomiędzy są następujące wartości:
261 260 263 262 281 280 322 321 324 323 243 211 347 346 378 377 380 379

Ten post edytował darko 31.01.2011, 11:21:33
Go to the top of the page
+Quote Post
maknus
post
Post #5





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

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


Niestety potrzebuję tego na poziomie bazy danych, aby już dane były w tym formacie w niej zapisane, przepuszczać każdego stringa przed insertem i update przez funkcje php zmieniającą to strasznie dużo roboty dlatego szukam prostszego rozwiązania najlepiej na poziomie bazy danych.
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(maknus @ 31.01.2011, 11:23:31 ) *
Niestety potrzebuję tego na poziomie bazy danych, aby już dane były w tym formacie w niej zapisane, przepuszczać każdego stringa przed insertem i update przez funkcje php zmieniającą to strasznie dużo roboty dlatego szukam prostszego rozwiązania najlepiej na poziomie bazy danych.

To będzie tak samo, jak w php tylko za pomocą mysql'owej funkcji replace
Go to the top of the page
+Quote Post
maknus
post
Post #7





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

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


To teraz z innej strony (IMG:style_emoticons/default/smile.gif)

Napisałem sobie taką małą procedurę do zmiany polskich liter, w skrócie wygląda ona tak:

  1. DROP PROCEDURE IF EXISTS proc2;
  2. delimiter //
  3. CREATE PROCEDURE proc2 (IN id_p INT)
  4. BEGIN
  5. UPDATE tabela1 SET tekst = REPLACE(tekst,'ą','a') WHERE id = id_p;
  6. END//
  7. delimiter ;


Tylko że nie chce dodać mi przyjąć tego 'ą'. Jeśli dam REPLACE(tekst,'b','a') nie ma problemu działa ale jak daje REPLACE(tekst,'ą','a') to mi się wywala.

Z góry dzięki za podpowiedź
Go to the top of the page
+Quote Post
darko
post
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


To jest chyba ten bug mysql ale nie jestem pewien, ogólnie u mnie raczej słabo z procedurami/funkcjami. Sprawdziłem za to samo replace w zapytaniu i u mnie działa.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 09:27