Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Like upit i utf-8

[es] :: MySQL :: Like upit i utf-8

[ Pregleda: 1243 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 273
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+3 Profil

icon Like upit i utf-826.04.2012. u 11:27 - pre 146 meseci
PRIMER:
Kada unesem reč "aşa", upit LIKE 'vlaska_rec%' daje mi:

aşa
aşadar
aşaḑa
aşaḑarĭe itd,

ali i:

aşćernut
aşťepta ...

Pretpostavljam da je problem u odnosu LIKE prema UNICODU, odnosno UTF-8, jer ne vidim drugi razlog da on pobrka jedno prosto slovo a, sa ć i ť

Pažljivo sam odguglao sva mesta gde se pominji slični problemi, primenio sam i na ES-u preporučene dopune:

Code:
mysql_query("SET NAMES utf8", $link);
mysql_query("SET CHARACTER SET utf8", $link);
mysql_query("SET COLLATION_CONNECTION='utf8_unicode_ci'", $link);

Ali, tek tada nastaje haos, jer pre ovoga tekstovi mi se u browseru prikazuju normalno, a sa ovim linijama sve mi se prebacuje na latin1.

Svuda sam u MySQL bazi - preko phpMyAdmin - u polje "sortiranje" stavio utf8_unicode_ci.
Takođe je i opcija
General Settings - Sortiranje za MySQL vezu podešeno na utf8_univode_ci.
PHP i HTML stranice imaju svuda

Code:
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


Ali, kad izvršim proveru:

Code:
    $charset = mysql_client_encoding($link);
    echo "<br>The current character set is: $charset\n";


dobijam odgovor "latin1" !??!

Možda će od pomoći biti još i ovo:
Kada uđem u phpMyAdmin, tekst u bazi vidim u latin1, ne u UTF-8 (nisu mi čitljivi).
(S druge strane, imam jednu drugu bazu, koju vidim i preko phpMyAdmin normalno!)

Pitanja:

1. Zašto mi je, i pored svega, prikaz baze latin1, a ne utf-8?
2. Zašto mi LIKE pogrešno čita karaktere?


 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Like upit i utf-826.04.2012. u 12:55 - pre 146 meseci
sve pise ovde: http://www.mysql.rs/2010/07/smece-u-bazi-po-ko-zna-koji-put/
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 273
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+3 Profil

icon Re: Like upit i utf-827.04.2012. u 12:49 - pre 146 meseci


Moram da priznam da sam ovu stranicu otkrio mnogo ranije, ali da tada nisam u potpunosti razumeo šta tačno treba da se radi, pa sam se sada malo više udubio, i uspeo sam da prebacim polja u mojim tabelama sa latin1 na utf8. Ali, osnovni problem je i dalje ostao nerešen:

LIKE brka multibajtne i karaktere!

Pažljivim čitanjem vašeg članka, uočio sam ovaj njegov deo:

Citat:

Damir - July 10, 2010

Prije svega, pun pogodak za clanak, hvala ti.

Kada pravim pretragu u mysql-u (…LIKE ‘%nešto%’…), a dobijem rezultat u kojem se nalazi “nesto” i “nešto”, da li je to znak “smeca” u bazi.
Rating: 0.0/5 (0 votes cast)
Rating: +1 (from 1 vote)

Bogdan Kecman - July 12, 2010

ne, naprotiv, to znaci da je mysql prepoznao š kao validan karakter. jednacenje izmedju š i s radi kolacija.. ide uskoro jedan clanak na tu temu, samo da uvatim 10min vremena


Pošto je moj problem POTPUNO isti kao i Damirov, ne ostaje mi ništa drugo nego da vas zamolim da mi date link na članak na tu temu, ukoliko ste ga napisali, ili da mi na neki drugi način pomognete

1. da shvatim u čemu je stvar, i
2. da rešim(o) problem


jer je bez preciznog pretraživanja sve besmisleno!

Poz. i hvala vam i unazad, za koristan tekst na blogu, i unapred za svaku vrstu odgovora!

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Like upit i utf-827.04.2012. u 18:43 - pre 146 meseci
Citat:
pakito: Pošto je moj problem POTPUNO isti kao i Damirov,


NIJE ISTI!

Ti si rekao:
Citat:
pakito: PRIMER:
Kada unesem reč "aşa", upit LIKE 'vlaska_rec%' daje mi:

aşa
aşadar
aşaḑa
aşaḑarĭe itd,

ali i:

aşćernut
aşťepta ...


a != ć
i
a != ť

dakle

Code:

mysql> select "aşćernut" like "aşa";
+--------------------------+
| "aşćernut" like "aşa"    |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select "aşćernut" like "aşc%"
    -> ;
+---------------------------+
| "aşćernut" like "aşc%"    |
+---------------------------+
|                         1 |
+---------------------------+
1 row in set (0.00 sec)

mysql> select "aşćernut" like "aşc%" collate utf8_bin;
+--------------------------------------------+
| "aşćernut" like "aşc%" collate utf8_bin    |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+
1 row in set (0.02 sec)


mysql> select "aşćernut" like "aşć%" collate utf8_bin;
+---------------------------------------------+
| "aşćernut" like "aşć%" collate utf8_bin     |
+---------------------------------------------+
|                                           1 |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql> 



tako da ako ne koristis binarnu kolaciju ć == c ali ć != a i to je ono sto je Damir tamo imao kao problem (koji se resava tako sto koristis binarnu kolaciju) ... tvoj problem je sto ti je ć == a a to je zato sto u bazi imas SMECE, a taj clanak koji sam ti linkovao ti objasnjava kako se to smece "cisti" iz baze.

uradi select HEX(takolonagdetijedata) pa vidi da to sto dobijes nazad NIJE validan utf8

uzdravlje
 
Odgovor na temu

[es] :: MySQL :: Like upit i utf-8

[ Pregleda: 1243 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.