В настоящее время я храню нормализованные версии строк в своей базе данных SQL Server в нижнем регистре. Например, в моей таблице «Пользователи» есть поля UserName и LoweredUserName. В зависимости от контекста я использую либо функцию T-SQL LOWER (), либо метод C # String.ToLower (), чтобы сгенерировать версию имени пользователя в нижнем регистре для заполнения поля LoweredUserName. В соответствии с рекомендациями Microsoft и правило анализа кода Visual Studio CA1308, я должен использовать C # String.ToUpperInvariant () вместо ToLower (). Согласно Microsoft, это проблема как производительности, так и глобализации: преобразование в верхний регистр безопасно, в то время как преобразование в нижний регистр может вызвать потерю информации (например, турецкая проблема" я ").
Если я перейду к использованию ToUpperInvariant для нормализации строк, мне также придется изменить схему моей базы данных, поскольку моя схема основана на Платформа членства Microsoft ASP.NET (см. этот связанный вопрос), который нормализует строки до нижнего регистра.
Разве Microsoft не противоречит сама себе, говоря нам использовать нормализацию верхнего регистра в C #, в то время как ее собственный код в таблицах и процедурах членства использует нормализацию нижнего регистра? Должен ли я переключить все на нормализацию верхнего регистра или просто продолжать использовать нормализацию нижнего регистра?