Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql_real_escape_string, polskie znaki wywalaja zapytanie..
Forum PHP.pl > Forum > Przedszkole
aAndrzej
Witam mam dziwny problem... pare danych na poczatek..

mysql: 5.0.22-community-nt
php: 5.1.0b3

odrazu po polaczeniu z mysql-em wysylam:
  1. SET NAMES utf8;
  2. SET collation_connection = 'utf8_general_ci';
  3. SET NAMES utf8;
  4. SET collation_connection = 'utf8_general_ci';


struktura tabeli tabela:
  1. CREATE TABLE `pref_wpisy` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `autor_id` int(11) NOT NULL,
  4. `data_dodania` int(11) NOT NULL DEFAULT '0',
  5. `data_wygasniecia` int(11) NOT NULL,
  6. `wlaczone` tinyint(1) NOT NULL,
  7. `tyt` varchar(255) NOT NULL,
  8. `tytul` varchar(50) character SET utf8 collate utf8_polish_ci NOT NULL,
  9. `wstep` varchar(255) NOT NULL,
  10. `tresc` longtext NOT NULL,
  11. `mapa_lat` varchar(50) NOT NULL,
  12. `mapa_lng` varchar(50) NOT NULL,
  13. `mapa_zoom` tinyint(2) NOT NULL,
  14. `promocja_pierwsze_miejsce` tinyint(1) NOT NULL DEFAULT '0',
  15. `tagi` text NOT NULL,
  16. PRIMARY KEY (`id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;


stringi filtruje za pomoca mysql_real_escape_string
kodowanie domyslne to utf-8

wszystko jest ok.. dopuki nie uzyje strtolower dla stringa z polskimi znakami.. mysql po takim czyms wywala mi komunikat np.

Data too long for column 'wstep' at row 1

dla kolumny wstep.. chociaz jest tam zaledwie 10 znakow, to pokazuje sie msg z bledem dlaczego ?
domyslam sie ze cos mysql nie radzi sobie z pl kodowaniem wiec uzylem funkcji:

  1. <?php
  2. public function kodowanie_strtolowers($str){
  3. $str=str_replace(chr(229).chr(154),'ś',$str);
  4. $str=str_replace(chr(229).chr(155),'ś',$str);
  5. $str=str_replace(chr(228).chr(132),'ą',$str);
  6. $str=str_replace(chr(228).chr(133),'ą',$str);
  7. $str=str_replace(chr(229).chr(134),'ć',$str);
  8. $str=str_replace(chr(228).chr(135),'ć',$str);
  9. $str=str_replace(chr(229).chr(153),'ę',$str);
  10. $str=str_replace(chr(228).chr(152),'ę',$str);
  11. $str=str_replace(chr(229).chr(131),'ń',$str);
  12. $str=str_replace(chr(229).chr(132),'ń',$str);
  13. $str=str_replace(chr(229).chr(129),'ł',$str);
  14. $str=str_replace(chr(229).chr(130),'ł',$str);
  15. $str=str_replace(chr(227).chr(179),'ó',$str);
  16. $str=str_replace(chr(227).chr(147),'ó',$str);
  17. $str=str_replace(chr(229).chr(190),'ż',$str);
  18. $str=str_replace(chr(229).chr(187),'ż',$str);
  19. $str=str_replace(chr(229).chr(185),'ź',$str);
  20. $str=str_replace(chr(229).chr(186),'ź',$str);
  21.  return $str;
  22.  }
  23. ?>


po funkcji strtolower i jest ok... ale do czasu.. czasem zdarza mi sie, ze nawet jesli nie uzywam strtolower to pojawia sie komunikat ze dane sa za duze do tego pola.. czy cos w miedzy czasie zrobilem zle.. czy musze poprostu przed kazdym wyslaniem danych do mysql przefiltrowac je zapomoca funkcji o ktorej napisalem wczesniej ?
mariuszn3
Mam wrażenie, że masz bazę w utf8 a wysyłasz dane w iso albo jeszcze w czymś innym
W każdym razie komumikat: 'Data too long for column' zawsze się pojawia, kiedy otrzymane dane nie pasują do kodowania tabeli
aAndrzej
wlasnie o to chodzi, ze wysylam w utf..
ale z tego co widzialem na bugs mysql-a to mysql 5.x nie radzi sobie dobrze z kodowaniami..

dla zainteresowanych:
http://bugs.mysql.com/bug.php?id=17872
mariuszn3
Ten bug dotyczy procedury i typu tinytext u Ciebie nie ma ani tego ani tego więc nie ma podstaw by uważać, że to wina tego bug'a.
Od dwóch lat zapisuje dane w bazach mysql w kodowaniu utf8 i nigdy nie miałem problemów z polskimi znakami.
Z której wersji mysql korzystasz?
Na jakiej podstawie uważasz, że dane, które przesyłasz na serwer MySQL są w kodowaniu utf-8?
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.