Cautare cu diacritice (MSSQL)

Întrebări legate de conectarea la alte baze de date relaţionale [PostgreSQL, mSQL, Oracle, Sybase, MS SQL Server] sau despre limbajul SQL în general.

Moderator: Moderatori

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Cautare cu diacritice (MSSQL)

Mesajde VasiuF » Dum Apr 26, 2009 11:27 am

Salutare ,
Am urmatoarea problema: trebuie sa caut intr-o tabela cu date deja introduse cu diacritice (campurile nume, prenume)
Am urmatorul select :

<?
if(strlen(trim($cauta)) > 0)
{
if (!empty($nume))
{
if(empty($filtru))
$filtru = " nume LIKE N'%$nume%' ";
else
$filtru.=" and "." nume LIKE N'%$nume%' ";
}
if (!empty($prenume))
{
if(empty($filtru))
$filtru = " prenume LIKE N'%$prenume%' ";
else
$filtru.=" and "." prenume LIKE N'%$prenume%' ";
}

if(!empty($filtru)) $filtru = " Where ".$filtru." COLLATE Latin1_General_CI_AS ";

$str_query = " select Nume,Prenume
from Tabela
$filtru
Order by Nume,Prenume";

$ret=mssql_query($str_query);
$n=mssql_num_rows($ret);
?>

Daca filtrul contine spre exemplu " nume LIKE N'%OPRIŞ%' "
atunci numarul de randuri returnate in aplicatie este 0, fara nici un mesaj de eroare.
Dar daca acelasi select il execut in Query Analyzer imi returneaza inregistrari
Mentionez ca folosesc SQL Server 2000 ptr. baza de date.

As avea nevoie de ajutor, ma poate ajuta cineva sa rezolv problema ?
Va multumesc



Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Dum Apr 26, 2009 2:36 pm

Incearca asa:
nume LIKE N'$nume' " sau doar asa si spune ce rezultat ai
nume LIKE '$nume' "

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Mesajde VasiuF » Dum Apr 26, 2009 5:36 pm

multumesc ptr. raspuns , dar, problema nu apare ca constructia filtrului ,
acel N din fata variabilei este ptr. tipul nvarchar, oricum am incercat si asa :(
dar fara rezultat.
Am copiat selectul format ( print $str_query ; ) si l-am executat in Quey Analyzer , e ok, returneaza inregistrari .

Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Dum Apr 26, 2009 5:49 pm

ai incercat si asa:
LIKE N'%".$prenume."%' " ?

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Mesajde VasiuF » Dum Apr 26, 2009 6:20 pm

Pot sa ma lipsesc de acel N din fata variabilei , practic cererea care o trimit catre serverul de SQL poate fi urmatoarea

select Nume, Prenume
from Tabela
Where nume LIKE '%opriş%' COLLATE Latin1_General_CI_AS

Nedumerirea mea este de ce in din pagina PHP nu imi returneaza nici un rand , in timp ce in query imi returneaza zeci ... :?

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Mesajde VasiuF » Dum Apr 26, 2009 6:21 pm

iar acel COLLATE Latin1_General_CI_AS
l-am folosit ptr ac SQL sa imi returneze si diacritice

Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Dum Apr 26, 2009 6:23 pm

ce tip de encode ai pus la pagina ?
E posibil sa iti transforme "ş" in %33s sau stiu-eu-ce

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Mesajde VasiuF » Dum Apr 26, 2009 6:30 pm

Romanian( iso-8859-16 )

Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Dum Apr 26, 2009 7:00 pm

Parerea mea e ca ai o eroare in $filtru Daca e gol unde este Where
si cred ca si aici e o problema
if(!empty($filtru)) $filtru = " Where ".$filtru." COLLATE Latin1_General_CI_AS ";

Incearca sa simplifici putin is zi ce rezultat ai.

Se poate sa gresesc dar nu te costa nimic daca incerci.
Bafta

VasiuF
PHPRomania Supporter
Mesaje: 6
Membru din: Dum Apr 26, 2009 10:13 am

Mesajde VasiuF » Dum Apr 26, 2009 7:12 pm

nu este greseala in filtru, cu siguranta iti zic , am testat acest gen de constructie, functioneaza in mai multe aplicatii (doar ca acum noutatea este diacriticele)

inclin sa cred ca de vina este biblioteca PHP-ului ptr. MSSQL ... care este limitata :(


Înapoi la “Alte baze de date”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 7 vizitatori