= Operatörü T-SQL olduğu gibi "eşittir" değildir "ifadenin bağlamının harmanlamasına göre aynı kelime / kelime öbeğidir" ve LEN "kelime / kelime öbeğindeki karakter sayısıdır." Hiçbir harmanlama, arkadaki boşlukları kendilerinden önceki kelime / ifadenin bir parçası olarak ele almaz (baştaki boşlukları önündeki dizenin bir parçası olarak değerlendirirler)
"Bu" ile "bu" arasındaki farkı ayırt etmeniz gerekiyorsa, "aynı kelime veya kelime öbeği" operatörünü kullanmamalısınız çünkü "bu" ve "bu" aynı kelimedir.
Yol = çalışmalarına katkıda bulunan, dize eşitliği operatörünün argümanlarının içeriğine ve ifadenin harmanlama bağlamına bağlı olması gerektiği, ancak her ikisi de dize türündeyse argümanların türlerine bağlı olmaması gerektiği fikridir. .
"Bunlar aynı kelimedir" şeklindeki doğal dil kavramı tipik olarak = gibi bir matematiksel operatör tarafından yakalanabilecek kadar kesin değildir ve doğal dilde dizgi türü kavramı yoktur. Bağlam (yani, harmanlama) önemlidir (ve doğal dilde mevcuttur) ve hikayenin bir parçasıdır ve ek özellikler (bazıları ilginç görünüyor), onu doğal olmayan dünyasında iyi tanımlanmış kılmak için = tanımının bir parçasıdır. veri.
Tür konusunda, farklı dize türlerinde depolandıklarında kelimelerin değişmesini istemezsiniz. Örneğin, VARCHAR (10), CHAR (10) ve CHAR (3) türlerinin tümü 'cat' kelimesinin temsillerini içerebilir ve? = 'kedi', bu türlerden herhangi birinin bir değerinin 'kedi' kelimesini barındırıp barındırmadığına karar vermemize izin vermelidir (büyük / küçük harf ve aksan sorunları harmanlama ile belirlenir)
JohnFx'in yorumuna yanıt:
Çevrimiçi Kitaplarda char ve varchar Verilerini Kullanma konusuna bakın . O sayfadan alıntı yapmak, benim vurgum
Her char ve varchar veri değerinin bir harmanlaması vardır. Harmanlamalar, her bir karakteri temsil etmek için kullanılan bit desenleri, karşılaştırma kuralları ve büyük / küçük harfe veya vurguya duyarlılık gibi nitelikleri tanımlar
.
Bulmanın daha kolay olabileceğine katılıyorum, ancak belgelendi.
Ayrıca kayda değer, SQL'in anlambiliminin, burada = gerçek dünya verileriyle ve karşılaştırmanın bağlamı (bilgisayarda depolanan bitlerle ilgili bir şeyin aksine) uzun süredir SQL'in bir parçası olduğudur. RDBMS'lerin ve SQL'in öncülü, gerçek dünya verilerinin sadık temsilidir, dolayısıyla benzer fikirler (CultureInfo gibi) Algol benzeri dillerin alanına girmeden yıllar önce harmanlamaları desteklemektedir. Bu dillerin temeli (en azından çok yakın zamana kadar) iş verilerinin yönetimi değil, mühendislikte problem çözmekti. (Son zamanlarda, arama gibi mühendislik dışı uygulamalarda benzer dillerin kullanılması bazı ilerlemeler yaratıyor, ancak Java, C # vb. Hala ticari olmayan kökleriyle mücadele ediyor.)
Bana göre SQL'i "çoğu programlama dilinden" farklı olduğu için eleştirmek adil değil. SQL, mühendislikten çok farklı bir iş veri modellemesi çerçevesini desteklemek için tasarlanmıştır, bu nedenle dil farklıdır (ve amacı için daha iyidir).
Heck, SQL ilk belirlendiğinde, bazı dillerde herhangi bir yerleşik dize türü yoktu. Ve yine de bazı dillerde dizeler arasındaki eşittir operatörü karakter verilerini hiç karşılaştırmaz, ancak referansları karşılaştırır! Bir veya iki on yıl içinde == kültüre bağlı fikrinin norm haline gelmesi beni şaşırtmaz.