2011-09-12 29 views
3

編集3:OK、以下のすべての複雑なものを忘れてしまいます。私の質問は、このように簡単です:次の結果の2番目の列は0に設定されているのはなぜ他のすべての列が1MySQLのINSTRと照合

SELECT 'a' = 'á', 
     INSTR('András','Andras'), 
     'András' LIKE 'Andras', 
     INSTR('András','Andräs') 

ありながら、データベースとの接続がUTF8に設定されています。

終了編集

私はMySQLのINSTR機能に問題があります。私は、照合utf8_general_ciと値 'AndrásSchiff'を含むVARCHAR列 'value'を持つテーブル 'values'を持っています。今、私は次のクエリを実行:

> SET NAMES 'utf8' COLLATE 'utf8_general_ci' 
> SELECT 'a' = 'á'; 
1 
> SELECT * FROM values WHERE value LIKE '%Andras%' 
'András' 
> SELECT * FROM values WHERE INSTR(value,'Andras') 
(Empty) 
> SELECT * FROM values WHERE INSTR(value,'Andräs') 
'András' 

を誰もがこの奇妙な振る舞いを説明できますか?私はLIKE '%...%'とINSTRは同等で、後者は検索文字列に '%'が含まれるという利点があると考えました。

おかげ

EDIT:もう一つは、私は気づいた:按分5.1.54 14.14 Verは、readlineの6.2

EDIT 2を使用して、Debian-のlinux-gnuの(x86_64版)のための私のMySQLのバージョンがある

> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci' 

は、「COLLATION 'utf8_unicode_ci'はCHARACTER SET 'バイナリ'」には無効です。しかし、私はキャラクタセットがなぜバイナリであるべきか理解していません。

+0

strが 'E' またはが含まれている場合、[INSTRは(STR、SUBSTR) "動作しないのが重複する可能性'とsubstrのみ "e"](http://stackoverflow.com/questions/20923186/instrstr-substr-does-not-work-when-str-contains-e-or-e-and-substr-only- e) – Ben

答えて

0

を実行し、このコマンドは、データベースMYDBのため

SHOW CREATE DATABASE mydb; 

出力例:

mysql> show create database conversationminer; 
+-------------------+------------------------------------------------------------------------------+ 
| Database   | Create Database                | 
+-------------------+------------------------------------------------------------------------------+ 
| conversationminer | CREATE DATABASE `conversationminer` /*!40100 DEFAULT CHARACTER SET latin1 */ | 
+-------------------+------------------------------------------------------------------------------+ 

1 row in set (0.00 sec) 

ただデータベースの文字セットに注意してください。

また、この

SHOW CREATE TABLE values\G 

ちょうどテーブルのキャラクタセットのノートを取りますか。

+0

ありがとうございます。データベースのキャラクタセットは実際latin1でしたが、照合順序を変更しても問題は解決しませんでした。テーブルにはデフォルトのcharsetとしてutf8があります。 – maranos

0

私はそれがMysqlのバグだと仮定します。

私は、mysqlバージョン "redhat-linux-gnu(x86_64)用のmysqlバージョン14.14 Distrib 5.1.67をreadline 5.1で使用しています。" COLLATION 'utf8_swedish_ci'はCHARACTER SET 'バイナリ'には無効です。

"mysql Ver 14.14 Distrib 5.5.27、Linux(i686)用readline 5.1"を使用していて、両方で同じデータベースがありますがエラーはありません。

したがって、mysqlを更新すると問題が解決する可能性があります。編集2部分に関するINSTRとCOLLATEアドレッシング

0

次の構文は、私の作品

SELECT * FROM values WHERE INSTR(value COLLATE utf8_unicode_ci,'Andras')