Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MSSQL Polskie litery

1,125 views
Skip to first unread message

Adam Klobukowski

unread,
Dec 20, 2012, 3:59:07 AM12/20/12
to
Witam

Zacznę od tego że nijak nie mogę zmienić konfirugracji serwera. Nie i koniec.

Pracuję z systemem który ma bardzo denerwujący sposób nazywania tabel i kolumn, co ostatecznie zmusza mnie do pisania zapytań poprzez generowanie ich, i wykonywanie przez exec. Problemem sa jednak polskie znaki.

Jeśli zrobię takie zapytanie:

SELECT * FROM tab where col = N'ąęł'

To wszystko jest ok.

Jeśli jednak zrobię tak:

declare @query varchar(4096)

set @query = N'SELECT * FROM tab where col = N''ąęł'''

exec (@query)

To finalnie wykonuje się:
SELECT * FROM tab where col = N'ael'

Czyli polskie litery zamieniane są na odpowiedniki :/

Można coś z tym zrobić? Próbowałem używać ? i % w miejscu polskich liter, ale to nic nie daje (nie matchuje). Dodam jeszcze że baza jest w trybie case-sensitive.

AdamK

PaSkol

unread,
Dec 20, 2012, 4:56:02 AM12/20/12
to
W dniu 2012-12-20 09:59, Adam Klobukowski pisze:
> Witam
>
> Zacznę od tego że nijak nie mogę zmienić konfirugracji serwera. Nie i koniec.

Żebyż to jeszcze było wiadomo jakiej konfiguracji? Całej, konkretnych
ustawień? Bo jeśli collation, to rzeczywiście nie jest to proste.
Łatwiej jest z collation bazy.

I gdybyż tak jeszcze było wiadomo jaki to MSSQL (2000, 2005, 2008, 2012)?

> Jeśli zrobię takie zapytanie:
> SELECT * FROM tab where col = N'ąęł'
> To wszystko jest ok.
>
> Jeśli jednak zrobię tak:
> declare @query varchar(4096)
>
> set @query = N'SELECT * FROM tab where col = N''ąęł'''
>
> To finalnie [...]
> polskie litery zamieniane są na odpowiedniki :/

declare @query nvarchar(2048);

wówczas:

set @query = N'zażółć gęślą jaźn';

będzie miało sens.

BTW. Na czym polega "denerwujący sposób nazywania"?

--
PaSkol (paskol.robi.to)

Adam Klobukowski

unread,
Dec 21, 2012, 3:00:47 AM12/21/12
to
On Thursday, 20 December 2012 10:56:02 UTC+1, PaSkol wrote:
> W dniu 2012-12-20 09:59, Adam Klobukowski pisze:
>
> > Witam
>
> > Zacznę od tego że nijak nie mogę zmienić konfirugracji serwera. Nie i koniec.
>
> Żebyż to jeszcze było wiadomo jakiej konfiguracji? Całej, konkretnych
> ustawień? Bo jeśli collation, to rzeczywiście nie jest to proste.

Na administracji się nie znam, nawet nie wiem za bardzo gdzie i co sprawdzić.

> Łatwiej jest z collation bazy.
>
> I gdybyż tak jeszcze było wiadomo jaki to MSSQL (2000, 2005, 2008, 2012)?

2008

> > Jeśli zrobię takie zapytanie:
> > SELECT * FROM tab where col = N'ąęł'
> > To wszystko jest ok.
> >
> > Jeśli jednak zrobię tak:
> > declare @query varchar(4096)
> >
> > set @query = N'SELECT * FROM tab where col = N''ąęł'''
> >
> > To finalnie [...]
> > polskie litery zamieniane są na odpowiedniki :/
>
> declare @query nvarchar(2048);
>
> wówczas:
>
> set @query = N'zażółć gęślą jaźn';
>
> będzie miało sens.

Nie działa :(

> BTW. Na czym polega "denerwujący sposób nazywania"?

Na tym że muszę używać frameworka ORMm który dla każdej instancji projektu generuje praktycznie nic nie znaczące nazwy tabel i kolumn (np: Te13fc3, C10493f), za każdym razem inne. Są też tabele 'systemowe' gdzie rozpiskę tego bajzlu trzyma. W związku z czym, aby zapytanie było przenośne pomiędzy instancjami projektu, najpierw odpytuję tabele systemowe o nazwy konkretnych tabel i kolumn, składam z tego zapytanie i na końcu odpalam przez exec.

AdamK

PaSkol

unread,
Dec 21, 2012, 3:26:56 AM12/21/12
to
W dniu 2012-12-21 09:00, Adam Klobukowski pisze:
>> declare @query nvarchar(2048);
>>
>> wówczas:
>>
>> set @query = N'zażółć gęślą jaźn';
>>
>> będzie miało sens.
>
> Nie działa :(

Uściślijmy. Czy:

select @query;

nie wyświetla polskich liter?

czy też użycie zapytania nie powoduje oczekiwanych efektów? Czy mogę
zobaczyć takie (wygenerowane) zapytanie? Jakie jest collation bazy?

select name, collation_name
from sys.databases
where name = n'NazwaTwojejBazyDanych';

Czy collation kolumny jest inne niż bazy danych (wystarczy zeskryptować
tabelę w Management Studio)?

>> BTW. Na czym polega "denerwujący sposób nazywania"?
>
> muszę używać frameworka ORMm który dla każdej instancji
> projektu generuje praktycznie nic nie znaczące nazwy tabel i kolumn

Co to za ORM? Jaki język programowania? Te, z którymi miałem do
czynienia, nie dawały takich efektów. Możliwe, że jest to kwestia
ustalenia jakichś opcji.

--
PaSkol (paskol.robi.to)

Adam Klobukowski

unread,
Dec 21, 2012, 4:22:35 AM12/21/12
to
On Friday, 21 December 2012 09:26:56 UTC+1, PaSkol wrote:
<ciach>

Ha! Dzięki PaSkol, dzięki twoim wskazówkom udało mi się dojść w czym problem (collation bazy to Latni1_General_BIN).

Otóż oczywiście moje zapytanie było nieco bardziej skomplikowane niż przykład który podałem. Przykład obrazujący
problem najprościej rozpisać tak:

declare @sub nvarvhar(30);
SELECT @sub = ...

declare @query nvarchar(4000)
set @query = N'zażółć ' + @sub + 'gęślą jaźn';

W tym wypadku, polskie litery są ucinane. Lecz wystarczy ostatnia linijkę przerobić tak:
set @query = N'zażółć ' + @sub + N'gęślą jaźn';

I już jest wszystko ok.

> >> BTW. Na czym polega "denerwujący sposób nazywania"?
> >
> > muszę używać frameworka ORMm który dla każdej instancji
> > projektu generuje praktycznie nic nie znaczące nazwy tabel i kolumn
>
> Co to za ORM? Jaki język programowania? Te, z którymi miałem do
> czynienia, nie dawały takich efektów. Możliwe, że jest to kwestia
> ustalenia jakichś opcji.

Nie, to nie jest kwestia opcji.
Nie jest to typowy framework ORM, bo nie jest przypisany bezpośrednio do żadnego języka. Zasadniczo jest to bardzo
'enterprisey' system który umożliwia tworzenie modelu obiektowego przechowywanych danych. Można się do tego dostać
przez C# lub Jave, ale też nie jest to miłe. Produkt ftirmy http://en.wikipedia.org/wiki/OpenText

AdamK
0 new messages