<t>InvariantCulture<br/>
<br/>
Uses a "standard" set of character orderings (a,b,c, ... etc.). This is in contrast to some specific locales, which may sort characters in different orders ('a-with-acute' may be before or after 'a', depending on the locale, and so on).<br/>
<br/>
Ordinal<br/>
<br/>
On the other hand, looks purely at the values of the raw byte(s) that represent the character.<br/>
<br/>
There's a great sample at https://learn.microsoft.com/en-us/dotnet/api/system.string.compare that shows the results of the various StringComparison values. All the way at the end, it shows (excerpted):<br/>
<br/>
StringComparison.InvariantCulture:<br/>
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)<br/>
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)<br/>
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)<br/>
<br/>
StringComparison.Ordinal:<br/>
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)<br/>
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)<br/>
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)<br/>
<br/>
```<br/>
<br/>
You can see that where InvariantCulture yields (U+0069, U+0049, U+00131), Ordinal yields (U+0049, U+0069, U+00131).</t>