wtorek, 15 lutego 2011

Azure UNICODE Friendly

Jeszcze jedna ciekawostka ze świata Azure jest taka, że jest on bardzo UNICODE. Jeżeli w tabelce mamy pole typu VARCHAR, a w nim np. słówko 'PAWEŁ' to szukając prostym zapytaniem :
SELECT *
FROM TABELKA
WHERE NAZWA = 'PAWEŁ';
... otrzymamy zero wyników. Azure sprytnie zamienia sobie "Ł" na "L" i szuka 'PAWEL' i oczywiście nie znajduje. Rozwiązania na znalezienie interesujących nas rekordów są dwa : zmiana pola z VARCHAR na NVARCHAR lub napisanie zapytania w taki sposób :
SELECT *
FROM TABELKA
WHERE NAZWA = N'PAWEŁ';

3 komentarze:

  1. Wydaje mi się, że to nie kwestia Azure - sam SQL Server tak działa.

    Spróbuj:

    CREATE TABLE dbo.Table1 (Column1 varchar(20))
    GO

    INSERT INTO dbo.Table1 VALUES('PAWEŁ')
    GO

    SELECT * FROM dbo.Table1

    OdpowiedzUsuń
  2. Nie bardzo rozumiem co masz na myśli Marku.

    O jednej kwestii w sumie nie napisałem. Collation na bazie to Polish_CI_AS.

    OdpowiedzUsuń
  3. Chodziło mi o to, że to nie Azure sprytnie zamienia sobie "Ł" na "L", a SQL Server.

    Miałem ostatnio podobny problem w systemie nie korzysta z Azure - w pliku .sql były polskie litery, skrypt wykonywał się prawidłowo, a dane w tabeli nie miały polskich liter. I właśnie to zapomniałem dodać w pierwszym komentarzu - polskie litery były "zjadane" lub nie w zależności od ustawionego collation.

    OdpowiedzUsuń