2011-12-05 24 views
3

私はスペイン語の単語を持つテーブルを持っています(INT id_word、VARCHAR(255)word)。テーブルには、これらのレコードがあるとしましょう:SQL - 完全一致を返す方法(特殊文字)

  • 1カサを
  • 2パンタロン
  • 私は言葉 パンタロンを検索する場合

(特殊文字のOで)それべきないリターンあらゆる行。完全一致を選択するにはどうすればよいですか?現在、2行目を返しています。

SELECT * FROM words WHERE word='pantalón'; 

ありがとう!

解決策ifxから、私は単語フィールドの照合をutf8_binに変更しました。

+1

ユニコードと照合についての有用な情報:http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.htmlテーブルのエンコード/照合とは何ですか? – biziclop

+0

こんにちは@biziclop - 私はutf8_general_ciを使用して – andufo

答えて

4

これは、照合に至るまでの理由です。アクセント記号(この場合は欲しい)とアクセント記号の影響を受けない(現在設定している)コラージュがあります。大文字と小文字を区別しない大文字と小文字を区別しない照合もあります。

次のコードは、正しい結果生成: - AIはアクセントを意味し、ここでキーが照合され

drop table test 
go 

create table test (
    id int identity(1,1), 
    value nvarchar(100) collate SQL_Latin1_General_Cp437_CI_AI 
) 
insert into test values ('casa') 
insert into test values ('pantalon') 

select value collate SQL_Latin1_General_Cp437_CS_AS from test where value = 'pantalón' 

create table test (
    id int identity(1,1), 
    value nvarchar(100) collate SQL_Latin1_General_Cp437_CI_AS 
) 

insert into test values ('casa') 
insert into test values ('pantalon') 

select value collate SQL_Latin1_General_Cp437_CS_AS from test where value = 'pantalón' 

を以下のコードは、誤った結果を生成します非機密扱い、ASはアクセントセンシティブを意味します。

+0

私はテーブルが実際にスペイン語、中国語、ポルトガル語で単語を保持するので、私はutf8_general_ciを選んだ。すべての言語の特殊文字を処理するアクセントに敏感な照合は何ですか?私はutf8_binに変更し、正常に動作しました。 – andufo

+1

utf8_binが最も正確ですが、文字列内の各文字のバイナリ値は比較/並べ替えに使用されるため、これらの操作中にパフォーマンスに影響を及ぼす可能性があります。 – ifx

0

私もこの問題を抱えています。私は2つのcoulmnsを持ち、1つはSearchColumn、もう1つはViewColumnです。データを保存するときに特殊文字を他の文字に置き換えます。ユーザーが同じ機能を持つ何かを検索したいときは、変更を行い、SearchColumnで検索します。一致すると、ViewColumnの値が表示されます。

+0

それは私のためには重すぎるだろう、私は文字通り何千もの行を取り除いた。照合順序を変更すると効果的です! – andufo

関連する問題