2009-08-10 4 views
3

intフィールドとvarcharフィールドとの一致条件を使用しています。 http://bugs.mysql.com/bug.php?id=22343によると、バイナリと非バイナリの列型を混在させると、マッチはバイナリになり、大文字と小文字が区別されます。大文字と小文字を区別しないで列の種類を混合するためのMySQL MATCHの使用

私の質問は、検索で大文字と小文字を区別しないようにする方法です。私はMATCH(lower(a)、b)AGAINST( 'title')を使ってみましたが、これはうまくいきません。

ここでは、テストとして使用できるスキーマを示します。

CREATE TABLE IF NOT EXISTS `foo` (
    `a` int(11) NOT NULL, 
    `b` varchar(50) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `foo` (`a`, `b`) VALUES 
(2345345, 'title and volume'), 
(145344, 'Volume'), 
(1234214, 'Title'); 

SELECT * FROM `foo` WHERE MATCH (a,b) AGAINST ('title' IN BOOLEAN MODE) 

答えて

2

は、私はあなたがしなければならないだろうと思います:

構文エラーがスローされます
SELECT * 
FROM `foo` 
WHERE MATCH(`a`) AGAINST ('title' IN BOOLEAN MODE) 
OR MATCH(`b`) AGAINST ('title' IN BOOLEAN MODE) 
+0

。私がLOWER(a)をしようとしたときと同様に –

+0

それは刺激的です。私はそれから 'MATCH'を分解しなければならないと思います。 – chaos

+0

前に読んだことは、マッチを分割することができます。上記の私のテストでは、まだ大文字と小文字が区別され、意味をなさない。 –