tablas sensibilidad primera nombres minúsculas minusculas mayúsculas mayusculas mayuscula lower_case_table_names los letra las ignorar identificar entre diferencias diferenciar mysql join case-insensitive match-against

sensibilidad - mysql mayuscula primera letra



combinación de mysql contra resultados insensibles a mayúsculas y minúsculas (2)

Creo que sus tablas no usan utf8_general_ci como colación, pero utf8_bin . Pude reproducir el comportamiento que describes después de modificar las tablas de la siguiente manera:

ALTER TABLE test1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ALTER TABLE bucket CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

Quizás deberías establecer la intercalación de tus tablas explícitamente para:

ALTER TABLE test1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE bucket CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Si lo anterior cambia algo, supongo que su servidor o sesión está configurado para usar otra intercalación de forma predeterminada (ya que la intercalación no está especificada en la definición de tablas). Esto podría verificarse con:

SHOW GLOBAL VARIABLES LIKE ''collation_server''; SHOW SESSION VARIABLES LIKE ''collation_server'';

Tengo dos mesas:

CREATE TABLE IF NOT EXISTS `test1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `bucket_id` int(10) unsigned NOT NULL COMMENT ''folder this component belongs to'', `test1_name` varchar(81) NOT NULL COMMENT ''Name of this component'', `test1_desc` varchar(1024) NOT NULL COMMENT ''Component Description'', PRIMARY KEY (`id`), FULLTEXT KEY `test1_search` (`test1_name`,`test1_desc`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; CREATE TABLE IF NOT EXISTS `bucket` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `bkt_name` varchar(81) NOT NULL COMMENT ''The name of this bucket'', `bkt_desc` varchar(1024) NOT NULL COMMENT ''A description of this bucket'', `bkt_keywords` varchar(512) DEFAULT NULL COMMENT ''keywords for searches'', PRIMARY KEY (`id`), FULLTEXT KEY `fldr_search` (`bkt_desc`,`bkt_keywords`,`bkt_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

El cubo es solo un soporte, mientras que el test1 contiene todas las cosas que entrarían en un cubo. Por ejemplo:

INSERT INTO `bucket` (`id`, `bkt_name`, `bkt_desc`, `bkt_keywords`) VALUES (1, ''Simpsons'', ''The Simpsons Cartoon Family was first successful adult cartoon series'', ''Homer, Marge, Lisa and Bart''), (2, ''Griffins'', ''The family from the popular family guy series'', ''Peter, Lois, Meg, Chris, Stewie, Brian''); INSERT INTO `test1` (`id`, `bucket_id`, `bkt_name`, `bkt_desc`) VALUES (1, 1, ''Homer Simpson'', ''Homer the figurative head of the Simpsons Family and is the husband of Marge''), (2, 2, ''Peter Griffin'', ''Peter the figurative head of the Griffin family on the hit TV seriers The family Guy'');

Ahora, usando la siguiente consulta, quiero buscar todos los depósitos cuyo nombre, descripción o palabras clave contengan el término de búsqueda "familia" o cuyos componentes contengan las palabras "familia"

Hasta ahora, lo que tengo es esta consulta y no devuelve resultados de casos mixtos ya que en "Familia" no se encuentra mientras "familia".

SELECT * FROM bucket RIGHT JOIN test1 ON test1.bucket_id = bucket.id WHERE bucket.isvisible > 0 AND MATCH(bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name) AGAINST(''family'' IN BOOLEAN MODE) OR MATCH(test1.test1_name, test1.test1_desc) AGAINST(''family'' IN BOOLEAN MODE)

También debería agregar que todos los campos de texto tienen la intercalación de utf8_general_ci como lo hace toda la tabla que es MyISAM.


La respuesta es aparentemente agregar algunos parens en torno a las cláusulas de dos partidos contra.

SELECT * FROM bucket RIGHT JOIN test1 ON test1.bucket_id = bucket.id WHERE bucket.isvisible > 0 AND ( MATCH(bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name) AGAINST(''family'' IN BOOLEAN MODE) OR MATCH(test1.test1_name, test1.test1_desc) AGAINST(''family'' IN BOOLEAN MODE) )