utf8 consulta charset mysql utf-8

consulta - utf8mb4 mysql



Cómo realizar una búsqueda de Accent Sensitive en MySql (10)

Bueno, acabas de describir de qué se trata la intercalación utf8_general_ci (a, á, à, â, ä, å todo es igual aa en comparación).

También ha habido cambios en el servidor 5.1 de MySQL en lo que respecta a utf8_general_ci y utf8_unicode_ci, por lo que depende también de la versión del servidor. Mejor revise los documentos.

Entonces, si es el servidor MySQL 5.0, buscaría utf8_unicode_ci en lugar de utf8_general_ci, lo cual es obviamente incorrecto para su caso de uso.

Tengo una tabla MySQL con utf8 general ci colación. En la tabla, puedo ver dos entradas:

un malo
un malo

Estoy usando una consulta que se ve así:

SELECT * FROM `words` WHERE `word` = ''abád''

El resultado de la consulta da ambas palabras:

un malo
un malo

¿Hay alguna manera de indicar que solo quiero que MySQL encuentre la palabra acentuada? Quiero que la consulta solo devuelva

un malo

También he intentado esta consulta:

SELECT * FROM `words` WHERE BINARY `word` = ''abád''

No me da ningún resultado. Gracias por la ayuda.


Compruebe si el tipo de intercalación de la tabla de la base de datos finaliza con "_ci", esto significa "insensible a mayúsculas y minúsculas" ...

Cámbielo a colación el mismo nombre o el más cercano sin el "_ci" ...

Por ejemplo ... cambie "utf8_general_ci" a "utf8_bin" Mke



En mi versión (MySql 5.0), no hay disponible ningún conjunto de caracteres utf8 para las búsquedas sensibles al acento y sin distinción de mayúsculas y minúsculas. El único cotejo de acento sensible para utf8 es utf8_bin. Sin embargo, también es sensible a mayúsculas.

Mi trabajo ha sido usar algo como esto:

SELECT * FROM `words` WHERE LOWER(column) = LOWER(''aBád'') COLLATE utf8_bin


Eso funciona para mí para una búsqueda insensible a mayúsculas y minúsculas en el servidor MySql 5.1 en una base de datos en utf8_general_ci, donde column es un LONGBLOB.

select * from words where ''%word%'' LIKE column collate utf8_unicode_ci

con

select * from words where''%word%'' LIKE column collate utf8_general_ci

el resultado es sensible a mayúsculas y minúsculas pero no acentuado.


Estaba obteniendo el mismo error.

Cambié la intercalación de mi tabla a utf8_bin (a través de phpMyAdmin) y se solucionó el problema.

¡Espero eso ayude! :)


La respuesta aceptada es buena, pero ten en cuenta que es posible que tengas que usar COLLATE utf8mb4_bin en su lugar.

WHERE col_name = ''abád'' collate utf8mb4_bin

Arriba repara errores como:

MySQL dijo: Documentación 1253 - COLLATION ''utf8_bin'' no es válido para CHARACTER SET ''utf8mb4''


Puedes intentar buscar la variable hexadecimal del personaje, HEX () dentro de mysql y usar una función similar dentro de tu lenguaje de programación y unirlas. Esto funcionó bien para mí cuando estaba haciendo una lista donde una persona podía seleccionar la primera letra de una persona.


Si sus búsquedas en ese campo siempre serán sensibles al acento, entonces declare la intercalación del campo como utf8_bin (que comparará para igualdad los bytes codificados en utf8) o utilice una intercalación específica de idioma que distinga entre acentuado y no -caracteres acentuados.

col_name varchar(10) collate utf8_bin

Si las búsquedas son generalmente insensibles al acento, pero desea hacer una excepción para esta búsqueda, intente;

WHERE col_name = ''abád'' collate utf8_bin


SELECT * FROM `words` WHERE column = ''abád'' collate latin1_General_CS

(o su colación incluyendo cs)