【问题标题】:'ß' character upper cased differently in SQL server and Python'ß' 字符在 SQL Server 和 Python 中大写不同
【发布时间】:2020-03-28 03:27:58
【问题描述】:

我有一个问题,这段代码给了我一个问题:

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

现在这个查询仍然返回 'ß'

在 Python 中,如果我将这个字符大写:

'ß'.upper()

这将返回“SS”。

问题是当我的字典包含一个带有该字符的字符串时,所以当我将 2 配对时它不匹配。任何关于此的指针将不胜感激。

【问题讨论】:

    标签: python sql sql-server python-3.x


    【解决方案1】:

    在德语中,ß 是一个仅以小写形式存在的字符,因为它从未出现在单词的开头。

    如果带有 ß 的单词大写,则会导致排版问题。

    为了解决这个问题,Unicode 中引入了大写的 ß 作为 U+1E9E。在其他代码页中它不可用。

    但这只是排版,Duden 的官方大写是 SS,而在最近的版本中不再禁止使用大写 ß。 DIN 标准将 SS 定义为 ß 的大写。

    所以Python的upper()的结果是正确的。

    这是 - 为您解答实际问题 - 您应该在比较之前使用 lower() 而不是 upper() 来规范化字符串的原因之一。

    【讨论】:

    • 感谢克劳斯惊人的深度回答。以后我会留意lower()。
    • 我不会说 Unicode 是“代码页”。除此之外,请参阅unicode.org/Public/13.0.0/ucd/SpecialCasing.txt,它显示了如何处理 U+00DF 的大小写。确实是个特例,U+1E9E 仅在 Unicode 5.1 中引入
    【解决方案2】:

    ß 有大写吗?如果没有,你为什么要提高它?无论如何,你可以使用正则表达式来增加[a-zA-Z]范围内的字符,如果超出这个范围,你可以保持原样

    【讨论】:

    • 因为我将列中的所有字符都大写以确保我不会在唯一字段中输入重复值,因为我输入的数据可以是大写或小写。
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多