2

私がしたい:

piščanec = mysql の piscanec. つまり、piscanec を検索して、piščanec も見つけたいと思っています。

したがって、č と c は同じで、š と s など...

正規表現を使用して実行できることはわかっていますが、これは遅いです:-( LIKE を使用する他の方法はありますか? 私は全文検索もよく使用しています。

アップデート:

select CONVERT('čšćžđ' USING ascii) as text

動作しません。プロデュース:?????

4

2 に答える 2

2

照合で列を宣言しますutf8_generic_ci。この照合では、šはsに等しく、čはcに等しいと見なされます。

create temporary table t (t varchar(100) collate utf8_general_ci);
insert into t set t = 'piščanec';
insert into t set t = 'piscanec';
select * from t where t='piscanec';
+------------+
| t          |
+------------+
| piščanec   |
| piscanec   |
+------------+

列の照合を使用したくない、または使用できない場合(utf8_generic_ci列に一意のインデックスがあり、piščanecとpiscanecを区別したい場合)、クエリでのみ照合を使用できます。

create temporary table t (t varchar(100) collate utf8_bin);
insert into t set t = 'piščanec';
insert into t set t = 'piscanec';
select * from t where t='piscanec';
+------------+
| t          |
+------------+
| piscanec   |
+------------+
select * from t where t='piscanec' collate utf8_general_ci;
+------------+
| t          |
+------------+
| piščanec   |
| piscanec   |
+------------+

FULLTEXTインデックスは、列の照合を直接使用することになっています。新しい照合を定義する必要はありません。どうやら、フルテキストインデックスは列のストレージ照合にのみ含めることができるためutf8_general_ci、検索とutf8_slovenian_ci並べ替えに使用する場合collateは、次の順序で使用する必要があります。

select * from tab order by col collate utf8_slovenian_ci;
于 2012-10-18T08:59:25.957 に答える
2

簡単ではありませんが、fulltrext 検索用に独自の照合順序を作成することをお勧めします。次に例を示します。

http://dev.mysql.com/doc/refman/5.5/en/full-text-adding-collat​​ion.html

詳細はこちら:

http://dev.mysql.com/doc/refman/5.5/en/adding-collat​​ion.html

そうすれば、照合ロジックを SQL およびビジネス ロジックから完全に独立させることができ、SQL の回避策を使って自分自身で面倒な作業を行う必要がなくなります。

編集:照合はすべての文字列照合操作に使用されるため、これは最善の方法ではない可能性があります: 言語的に個別の文字間の違いを難読化することになります。

特定の操作でこれらの違いを抑制したい場合は、文字列を取り、現在の操作の目的で同一と見なされる文字をターゲットを絞った方法で置き換える関数を作成することを検討してください。

基本文字 (š、č など) を保持する 1 つのテーブルと、同等のものを保持する別のテーブルを定義できます。次に、文字列に対して REPLACE を実行します。

もう 1 つの方法CAST、文字列を toASCIIにすることです。これにより、すべての非文字が抑制されますASCII

例えば

SELECT CONVERT('<your text here>' USING ascii) as as_ascii
于 2012-10-18T08:03:14.793 に答える