SQL Server UPPER function on non-english characters

Last week,  I got a question

Does SQL Server “UPPER” function work properly on non-English characters as well? Tried searching in net, but couldn’t find clear documentation around this..

I did a quick test on my SQL box:

--upper case i in Turish is different

select upper(N'i')

go

 

select upper(N'i' collate turkish_ci_as)

go

 

--This does not work, I am not sure why

select lower(N'SS')

select lower(N'SS' collate German_PhoneBook_CI_AI)

select upper(N'ß' collate German_PhoneBook_CI_AI)

go

So  the answer is YES, and the reason SS in German not working is because of

The reason why the example above works the way it does is because Windows casing tables only support simple Unicode casing. That doesn’t include rules that would change the size of the
string such as lowercasing SS as ß, or uppercasing ß as SS.