Bu sorun, aksama duyarlı olmayan harmanlamalar kullanılarak çözülebilir .
Veritabanınız muhtemelen bir AS (Accent Sensitive) harmanlaması kullanıyor, bu yüzden varsayılan olarak aksanlar da dahil olmak üzere tam eşleşmeyi arayacaktır.
Karşılaştırma ile bir harmanlama belirterek WHERE yan tümcesini veritabanı varsayılanından başka bir harmanlama kullanma talimatı verebilirsiniz.
Gelen bu dbfiddle ben LATIN1 alfabe kullanan bir örnek oluşturdu, ancak sadece kendi sütun şu anda kullandığı harmanlama için AI içine AS değiştirerek kullandığınız harmanlama ile aynı yaklaşımı kullanabilirsiniz.
Sütunun kullandığı harmanlama ile eşleşen Accent Duyarsız harmanlamayı kullanın. Sütun kullanarak Örneğin SQL_Latin1_General_CP1_CI_AS
, kullanımını SQL_Latin1_General_CP1_CI_AI
ve Latin1_General_CI_AS
ya Latin1_General_100_CI_AS
olan veya olmayan SQL_ alfabe davranışı beri o ikisinin varyasyonların herhangi sadece aksan-duyarsızlığı daha farklı şekillerde farklı olacaktır ve bu kullanıcılar tarafından beklendiği gibi olmayabilir.
İçinde geçerli harmanlamayı kontrol edebilirsiniz sys.columns
.
CREATE TABLE testaccent (name nvarchar(50));
GO
INSERT INTO testaccent (name) VALUES ('Millière') , ('Milliere');
GO
-- returns Miliere
SELECT * FROM testaccent WHERE name = 'Milliere';
-- returns both
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AI
--only returns Miliere
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AS
Daha fazla bilgi için SQL Server Harmanlamalarını Kullanma bölümünü okuyun .
Sonra tekrar muhtemelen (bu harmanlamayı kullanmak için sıralama istediğiniz ediyorum peufeu "e" ile o "é" türlü sağlamak için açıklamalarda belirtildiği). Aksi takdirde, sonuçları alfabetik sırayla sayfalandıran biri, onların olmasını bekledikleri yerde "é" yi bulamamaya şaşırır, ancak yalnızca bu sorguya dokunmak istiyorsanız COLLATE
maddeyi de ekleyebilirsiniz ORDER BY
.
Solomon Rutzky'nin yorumlarda belirttiği gibi , bu yalnızca 1 veya birkaç sütunu etkiliyorsa, başka bir seçenek de, "ad" sütununu tekrarlayan ve aksana duyarsız harmanlama sağlayan kalıcı olmayan bir hesaplanmış sütun oluşturmak ve hesaplanan dizini oluşturmaktır. sütunu. Bu, sorgu içindeki harmanlamayı değiştirerek oluşan taramayı önler. Ardından, sorgunun yeni sütunda filtrelenmesi gerekir.
Gibi bir şey:
ALTER TABLE
dbo.[table_name] ADD [SearchName] datatype_of_name_column
AS ([Name] COLLATE LATIN1_GENERAL_100_CI_AI));
CREATE INDEX [IX_table_name_SearchName]
ON dbo.[table_name] ([SearchName] ASC);
Veya hesaplanmış bir sütun ( jyao tercih ettiği gibi) eklemek yerine bir görünüm de oluşturabilirsiniz .