Soci (Soczó Zsolt) szakmai blogja

2016.11.04.

Mit is jelent pontosan, hogy Accent Insensitive?

Filed under: Adatbázisok,SQL Server,Szakmai élet — Soczó Zsolt @ 12:18

Bólyai magyar verseny kapcsán gondolkodtam a magyar nyelv rendezési szabályain.

[source lang=”csharp”]
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);
}
[/source]

Kimenet:
[source lang=”text”]
írás
írat
irkál
író
irodalom
írógép
[/source]

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!

[source lang=”sql”]
CREATE TABLE [dbo].[A](
[Nev] [nvarchar](50) NOT NULL
) ON [PRIMARY]

select * from A
order by Nev collate hungarian_CS_AI
[/source]

Azaz Accent Insensitive a rendezés, így joggal azonos a C#-pos kimenettel:
[source lang=”text”]
írás
írat
irkál
író
irodalom
írógép
[/source]

Ami viszont bizarr:
[source lang=”sql”]
select * from A
order by Nev collate hungarian_CS_AS
[/source]

Kimenet:
[source lang=”text”]
írás
írat
irkál
író
irodalom
írógép
[/source]

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:
[source lang=”sql”]
select * from A
order by Nev collate Hungarian_Technical_CI_AS
select * from A
order by Nev collate Hungarian_Technical_CI_AI
[/source]

Mindét esetben ez a kimenet:
[source lang=”text”]
irkál
irodalom
írat
írás
író
írógép
[/source]

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.

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress