Jump to content
php.lv forumi

SELECT pēc stringa pirmā simbola (UTF8)


DarkSide

Recommended Posts

Sveiki!

Doma tāda - ir MySQL (5.0.15), PHP(4.3.11), Apache. Visur tiek lietots UTF8 kodējums (default character set utf8 iekš mysql, php formas visas UTF8 utt). SET NAMES utf8 un SET CHARACTER SET utf8 tiek lietots.

Problēma ir ar to, ka korekti neizpildās sekojošs SELECT:

$query = "SELECT * FROM clients WHERE substring(client_surname,1,1)='$prefix'";

$prefix šai gadījumā ir UTF8 kodējumā viens burts (parastiem burtiem 1 baits, unicode burtiem 2 un vairāk baiti - kā jau tas unicodee ir).

Vienvārdsakot, ja meklē piemēram pēc pirmā burta 'Š', tad tiek atlasīti visi, kam S un kam Š arī. Ja meklē pēc S, tad arī atlasa gan S gan Š. Tas pats ar Z un Ž utt... Kur vaŗētu būt problēma? Ir kādas idejas?

 

EDIT_1: Sekojošs selekts atgriež sekojošas vērtības:

SELECT id,client_surname,ord(substring(client_surname,1,1)) a1,ord(substring(client_surname,2,1)) a2 FROM clients

1|ŠIA ABC|50592|73

2|SIA CBA|83|73

Tātad MySQL substring strādā korekti (ņemot vērā utf8 kodējumu).

 

EDIT_2: Problēma nav ar PHP, bet par pašu MySQL, jo arī no mysql konsoles (no command prompt) rakstot

SELECT * FROM clients WHERE substring(client_surname,1,1)='S'

tiek atgriezti abi divi (ar Š un S) ieraksti... :(

 

EDIT_3: HA! Problēma atrisinājās. Izrādās ļoti būtiski ir veidojot tabulas norādīt ne tikai DEFAULT CHARACTER SET utf8, bet obligāti norādīt arī COLLATE utf8_latvian_ci. Tad viss strādā!!! :) :) :) Urrāaaa!!! :)

Edited by DarkSide
Link to comment
Share on other sites

×
×
  • Create New...