2010-04-09 16 views
25

Bu iki querys bana aynı sonucu veriyor:MySQL ÅÄÖ'yi AAO olarak mı değerlendiriyor?

select * from topics where name='Harligt'; 
select * from topics where name='Härligt'; 

Bu nasıl olabilir? Mysql, arama yaparken áäö aao'ya benziyor. Bunu kapatmak için bir yol var mı?

Her yerde bildiğim kadarıyla utf-8 kodlamasını kullanırım. Aynı problem hem terminalden hem de php'den kaynaklanmaktadır.

cevap

31

Evet, bu sigara dile özgü unicode alfabe standart davranıştır yardımcı olmalıdır.

9.1.13.1. Unicode Character Sets

Daha ayrıntılı açıklamak gerekirse

aşağıdaki eşitlik iki utf8_general_ci tutun ve utf8_unicode_ci (bu karşılaştırmalarda veya arama yaparken sahip bir etki için, “Harmanlama Etkisinin Örnekler bölümünde 9.1.7.7 bkz “):

A = A Ö = O Ü = U

da Examples of the effect of collationbakınız Ya

  • (yani utf8_bin, ama bu diğer sonuçları vardır) bu "özelliğini" olmayan bir harmanlama

    • kullanım sorgu için farklı bir harmanlama kullanmak gerekir sadece. Bu çalışması gerekir: daha zor hale gelir

      select * from topics where name='Harligt' COLLATE utf8_bin; 
      

    Eğer LIKE ama duyarsız bir vaka yapmak istiyorsanız değilÄ = A umlaut dönüşüm var. Durumun duyarsız olduğunu ve bu tür bir örtülü ımla dönüştürme yapmaz MySQL harmanlama biliyorum. Birisi bilen varsa, bunu duymak isterim.

    İlgili: İsveç'te olduğundan

  • 4

    İsveçli harmanlama kullanarak öneriyoruz.İşte yapar farkını gösteren bir örnek: Bu örnekte sadece İsveçli alfabe düzeni için bir sütun değişti

    CREATE TABLE topics (name varchar(100) not null) CHARACTER SET utf8; 
    
    INSERT topics (name) VALUES ('Härligt'); 
    
    select * from topics where name='Harligt'; 
    'Härligt' 
    
    select * from topics where name='Härligt'; 
    'Härligt'  
    
    ALTER TABLE topics MODIFY name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci; 
    
    select * from topics where name='Harligt'; 
    <no results> 
    
    select * from topics where name='Härligt'; 
    'Härligt' 
    

    Not Ancak, tüm veritabanı, tüm tabloları, tüm varchar sütunlar için bunu muhtemelen gerekir.

    +0

    Bu, i thanspanyolca diğer diller için çalı somalıdır, bu yüzden utf8_bin istediğim harmanlamadır, ama harmanlamayı yalnızca tek bir sütunda değiştirebileceğimi bildiğiniz için teşekkürler, bu gerçekten yararlı olacaktır. – Martin

    +0

    utf8_bin'in büyük/küçük harfe duyarlı olduğunu unutmayın, bu nedenle "härligt"! = "Härligt" (benzersiz dizinler için de geçerlidir). – serbaut

    İlgili konular