Символ «ß» в верхнем регистре по-разному на SQL сервере и Python - PullRequest
0 голосов
/ 28 марта 2020

У меня есть проблема, из-за которой этот код вызывает у меня проблему:

SELECT ID, UPPER(ItemDescription)
FROM ItemDescriptions
WHERE ItemDescription = 'ß'
ORDER BY ItemDescription

Теперь этот запрос по-прежнему возвращает 'ß'

В Python, если я прописал этот символ как таковой :

'ß'.upper()

Возвращает 'SS'.

Проблема в том, что у меня есть словарь, который содержит строку с этим символом, поэтому он не совпадает, когда я соединяю 2 вверх. Любые указатели на это будут оценены.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

В немецком языке ß - это символ, который существует только в нижнем регистре, так как он никогда не встречается в начале слов.

Это приводило к проблемам в типографии, если слово с ß было написано заглавными буквами.

Чтобы решить эту проблему, в Юникоде введена заглавная буква ß как U + 1E9E. В других кодовых страницах это не доступно.

Но это только типографский, официальная заглавная буква Дюдена - SS, в то время как в большинстве последних выпусков больше не запрещено использование капитала ß. Стандарт DIN определяет SS как заглавную букву ß.

Таким образом, результат Python upper() является правильным.

Это - чтобы получить к вам актуальный вопрос - один из причины, по которым вы должны использовать lower() вместо upper() для нормализации строк перед сравнением.

0 голосов
/ 28 марта 2020

Есть ли верхний регистр ß? Если нет, почему вы это делаете? В любом случае, вы можете использовать регулярные выражения только для верхних символов в диапазоне [a-zA-Z], если он находится за пределами этого диапазона, вы можете просто оставить его как

...