Der Operator = ist T-SQL ist nicht so sehr "gleich", sondern "sind dasselbe Wort / dieselbe Phrase gemäß der Zusammenstellung des Kontextes des Ausdrucks", und LEN ist "die Anzahl der Zeichen in dem Wort / der Phrase". Keine Kollatierungen behandeln nachgestellte Leerzeichen als Teil des vorangestellten Wortes / Satzes (obwohl sie führende Leerzeichen als Teil der Zeichenfolge behandeln, der sie vorangehen).
Wenn Sie "dies" von "dies" unterscheiden müssen, sollten Sie den Operator "Sind dasselbe Wort oder dieselbe Phrase" nicht verwenden, da "Dies" und "Dies" dasselbe Wort sind.
Zu way = works trägt die Idee bei, dass der String-Equality-Operator vom Inhalt seiner Argumente und vom Kollatierungskontext des Ausdrucks abhängen sollte, aber nicht von den Argumenttypen, wenn beide Stringtypen sind .
Das natürliche Sprachkonzept von "das sind das gleiche Wort" ist normalerweise nicht präzise genug, um von einem mathematischen Operator wie = erfasst zu werden, und es gibt kein Konzept des Zeichenfolgentyps in natürlicher Sprache. Der Kontext (dh die Kollatierung) ist wichtig (und existiert in natürlicher Sprache) und ist Teil der Geschichte, und zusätzliche Eigenschaften (einige, die skurril erscheinen) sind Teil der Definition von =, um sie in der unnatürlichen Welt von gut definiert zu machen Daten.
Bei der Typproblematik möchten Sie nicht, dass sich Wörter ändern, wenn sie in verschiedenen Zeichenfolgentypen gespeichert werden. Beispielsweise können die Typen VARCHAR (10), CHAR (10) und CHAR (3) alle Darstellungen des Wortes "Katze" enthalten, und? = 'cat' sollte uns entscheiden lassen, ob ein Wert eines dieser Typen das Wort 'cat' enthält (wobei Fall- und Akzentprobleme durch die Sortierung bestimmt werden).
Antwort auf den Kommentar von JohnFx:
Siehe Verwenden von char- und varchar-Daten in Online-Büchern. Zitat von dieser Seite, Hervorhebung von mir:
Jeder char- und varchar-Datenwert hat eine Sortierung. Kollatierungen definieren Attribute wie die Bitmuster, die zur Darstellung der einzelnen Zeichen verwendet werden,
Vergleichsregeln und die Empfindlichkeit gegenüber Groß- und Kleinschreibung oder Akzentuierung.
Ich bin damit einverstanden, dass es einfacher zu finden sein könnte, aber es ist dokumentiert.
Bemerkenswert ist auch, dass die Semantik von SQL, bei der = mit den realen Daten und dem Kontext des Vergleichs zu tun hat (im Gegensatz zu etwas über auf dem Computer gespeicherte Bits), seit langem Teil von SQL ist. Die Prämisse von RDBMS und SQL ist die getreue Darstellung realer Daten, daher die Unterstützung von Kollatierungen viele Jahre bevor ähnliche Ideen (wie CultureInfo) in den Bereich algolähnlicher Sprachen gelangten. Die Prämisse dieser Sprachen war (zumindest bis vor kurzem) die Problemlösung im Ingenieurwesen, nicht die Verwaltung von Geschäftsdaten. (In letzter Zeit hat die Verwendung ähnlicher Sprachen in nicht-technischen Anwendungen wie der Suche einige Fortschritte gemacht, aber Java, C # usw. haben immer noch Probleme mit ihren nicht-geschäftlichen Wurzeln.)
Meiner Meinung nach ist es nicht fair, SQL dafür zu kritisieren, dass es sich von "den meisten Programmiersprachen" unterscheidet. SQL wurde entwickelt, um ein Framework für die Modellierung von Geschäftsdaten zu unterstützen, das sich stark vom Engineering unterscheidet. Daher ist die Sprache anders (und besser für das Ziel).
Als SQL zum ersten Mal angegeben wurde, hatten einige Sprachen keinen integrierten Zeichenfolgentyp. Und in einigen Sprachen vergleicht der Gleichheitsoperator zwischen Zeichenfolgen überhaupt keine Zeichendaten, sondern Referenzen! Es würde mich nicht überraschen, wenn in ein oder zwei weiteren Jahrzehnten die Idee, dass == kulturabhängig ist, zur Norm wird.