Bólyai magyar verseny kapcsán gondolkodtam a magyar nyelv rendezési szabályain.
string[] words = new string[] { "írógép", "írat", "irkál", "irodalom", "író", "írás" }; Array.Sort(words, StringComparer.Create(new System.Globalization.CultureInfo("hu-hu"), false)); foreach (var w in words) { Console.WriteLine(w); }
Kimenet:
írás írat irkál író irodalom írógép
Ezek szerint az alap magyar kultúra szerint a C# (valójában a Windows) accent insensitive módon rendez. A gyerekek is azt mondták, így tanulják az iskolában. Az én fejemben ez nem így volt. Vagy bugos a fejem, vagy mi még nem így tanultuk, nem tudom.
Nézzük SQL Serverben!
CREATE TABLE [dbo].[A]( [Nev] [nvarchar](50) NOT NULL ) ON [PRIMARY] select * from A order by Nev collate hungarian_CS_AI
Azaz Accent Insensitive a rendezés, így joggal azonos a C#-pos kimenettel:
írás írat irkál író irodalom írógép
Ami viszont bizarr:
select * from A order by Nev collate hungarian_CS_AS
Kimenet:
írás írat irkál író irodalom írógép
Ugyanaz! Magyar nyelv esetén nem számít az ékezet érzékenység, akkor se vesszük figyelembe az ékezeteket, ha kifejezetten kérjük. Ez nekem furcsa, de nem én írom a magyar nyelvi szabályokat.
Van egy másik collation is, annál meg mindig accent insensitive a rendezés, függetlenül a beállítástól:
select * from A order by Nev collate Hungarian_Technical_CI_AS select * from A order by Nev collate Hungarian_Technical_CI_AI
Mindét esetben ez a kimenet:
irkál irodalom írat írás író írógép
Tehát a magyar az egy olyan állatfajta, amiben nem az AI/AS szabályozza az Accent Sensitivity-t, hanem, hogy melyik collationt használjuk.
Ami viszont végképp fura, hogy a Latin1_General_100_CI_AS vs Latin1_General_100_CI_AI sem változtatja meg a sorrendet. Hogy van ez?
A mi aá, stb. variánsaink nem tartoznak az accentek közé?
Itt és itt érdekeseket írnak a témáról.
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.