Az nvarchar varázsa
(Kolos kedvéért tényleg írok erről blogot:))
Az egész úgy kezdődött, hogy az adatbázisban az orosz nyelvű országnevek (melyek nvarchar(200) típusú oszlopban voltka tárolva) nem jelentek meg ábécésorrendben, habár erre meg lettek kérve. Tulajdonképpen sorban voltak ők, csak az az egyetlen fránya Tajvan (úgy értem Тайвань) volt mindig a sor elején. Erről nem lehetett lebeszélni, hiába mondtuk, hogy
SELECT country_name FROM translations WHERE lang = 'RU' ORDER BY country_name
Csak úgy kezdte mindig, hogy:
Tайвань
Австралия
Австрия
Азербайджан
Албания
Алжир
…
Таджикистан
Таиланд
Танзания
Muszáj volt gondolkodnom. Persze mivel multinyelvű helyen dolgozom, automatikusan az jutott eszembe, hogy nézzük meg a biteket, mert a unicode érdekes állat (apropó, ha valaki nem tudná, az, amit a Microsoft unicode-nak hív, a UCS2-LE (Little Endian) változat, történelmi okokból kifolyólag, sokak bánatára nem UTF-8, de hát akkor az UTF-8 még nem volt ilyen népszerű). Hát ez történt:
SELECT country_name, convert(varbinary(400)), country_name) uni FROM translations WHERE lang = 'RU' ORDER BY country_name
Ez sokat segített:
Taйвань 0×540061003904320430043D044C04
Австралия 0×1004320441044204400430043B0438044F042000
Австрия 0×1004320441044204400438044F042000
Азербайджан 0×10043704350440043104300439043404360430043D042000
Албания 0×10043B04310430043D0438044F042000
Алжир 0×10043B043604380440042000
…
Таджикистан 0×220430043404360438043A0438044104420430043D042000
Таиланд 0×2204300438043B0430043D0434042000
Тайвань 0×220430043904320430043D044C04
Танзания 0×220430043D04370430043D0438044F042000
Szóval annyi történt, hogy az ember, aki fordította a szövegeket, valami latin karakterkiosztáson kezdte felvinni az adatokat, és a Ta még sikerült, de a j, vagyis й már meghaladta a latin ábécé képességeit, úgyhogy átváltott oroszra, de nem törölte ki az első két karaktert.
