0

このクエリを使用する Web サイトがあります。

SELECT did, kid FROM top_keywords WHERE MATCH('@keyword "^EXAMPLE KEYWORD$"') LIMIT 0,

100;

99% の確率で問題なく動作しますが、一部のエンコーディングでは動作しません。例:

SELECT did, kid FROM top_keywords WHERE MATCH('@keyword "^εργον$"') LIMIT 0, 100;

エラーが発生します:

エラー 1064 (42000): インデックス top_keywords: 構文エラー、予期しない '$'、'εργον$"' の近くに TOK_KEYWORD または TOK_INT が必要です

私のスフィンクスのバージョンは 2.0.6 です。

私の唯一の考えは、 conf-charset-typeと関係があるということです。

4

1 に答える 1

1

あなたの言葉εργονを コピーしてhttp://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoderに貼り付けてみました

非ASCII UTF8文字で完全に構成されているようです。(つまり、コードはすべて 255+ です)

だから、それが機能するために必要なすべての手紙charset_table


私は彼らがあなたの中にいないと推測していますcharset_table(設定するだけでcharset_type=utf8は十分ではありません)。その場合、それらは完全に削除されるため、クエリは次のようになります

SELECT did, kid FROM top_keywords WHERE MATCH('@keyword "^ $"') LIMIT 0, 100;

...文字はすべて区切り文字として使用されるため、明らかに無効なクエリが残ります。


残念ながら、国際的なサポートのための charset_table の適切なリファレンスを提供することはできません (何も知りません!)

于 2013-08-12T09:52:06.877 に答える