I guess after 40 years my french reading skills have severely attrophied.
What would the "AI" in FR_AI refer to?
Separately, in doing searches on this subject, I did find a mention on a Microsoft site while talking about uppercasing and how different rules can apply to the same base language based on regional requirements, which said "...in the case of European French accents are remove where strings are uppercased, whereas in the case of French-Canadian they are kept..." (I can't find the link now). So, it seems that when the original FR_FR collation was developed it followed that 'mindset'.
About the "mindset", yes but it was in time where Microsoft did not provide good keyboard mapping I guess
today on my French keyboard I have to problem to type ÉÀ etc ... (but maybe it is still hard under Windows, I don't know)
to come back to the problem
the actual FR_FR (but also NXT_FRA, db_fra850 and db_frc850) have some kind of logic, when uppering it remove accent but only for letter that exist in French
1/ it is wrong according to French rules
2/ it lead to problem :
upper(sales)=upper(salés) but what about lower(SALES) ?
it should be Undefined ...
and in French sale and salés means dirty and salted , see the problem ?
so really all should behave the correct way, like FR_CA, this silly FR_FR have no sense, it was here only to help (badly) to do case insensitive, accent insensitive search, but today, we have other way to do it right with CI_AI collations
upper(lower('À')) should be equal to 'À'
and lower(upper('à')) should be equal to 'à'