-
BINARY
El operador
BINARY
convierte la cadena a continuación a una cadena binaria. Esta es una forma fácil de forzar una comparación de columna byte a byte en lugar de carácter a carácter. Esto hace que la comparación sea sensible a mayúsculas incluso si no está definida comoBINARY
oBLOB
.BINARY
también hace que los espacios finales sean significativos.mysql> SELECT 'a' = 'A'; -> 1 mysql> SELECT BINARY 'a' = 'A'; -> 0 mysql> SELECT 'a' = 'a '; -> 1 mysql> SELECT BINARY 'a' = 'a '; -> 0
BINARY
afecta la comparación; puede darse antes de cualquier operando con el mismo resultado.BINARY
str
es una abreviación deCAST(
str
AS BINARY).Tenga en cuenta que en algunos contextos, si cambia el tipo de una columna
BINARY
indexada, MySQL no es capaz de usar el índice eficientemente.Si quiere comparar un valor
BLOB
u otra cadena binaria de forma no sensible a mayúsculas, puede hacerlo teniendo en cuenta que las cadenas binarias no tienen conjunto de carácteres, y por lo tanto no tienen concepto de mayúsculas. Para una comparación no sensible a mayúsculas, use la funciónCONVERT()
para convertir el valor de cadena a un conjunto de carácteres no sensible a mayúsculas. El resultado es una cadena no binaria. El resultado es una cadena no binaria, así que la operaciónLIKE
no es sensible a mayúsculas:SELECT 'A' LIKE CONVERT(
blob_col
USING latin1) FROMtbl_name
;Para usar un conjunto de carácteres diferente, substituya su nombre por
latin1
en el comando precedente.CONVERT()
puede usarse más generalmente para comparar cadenas que se representan en distintos conjuntos de carácteres. -
CAST(
expr
AStype
),CONVERT(
expr
,type
) ,CONVERT(
expr
USINGtranscoding_name
)Las funciones
CAST()
yCONVERT()
pueden usarse para tomar un valor de un tipo y producir un valor de otro tipo.type
puede ser uno de los siguientes valores:-
BINARY
-
CHAR
-
DATE
-
DATETIME
-
DECIMAL
-
SIGNED [INTEGER]
-
TIME
-
UNSIGNED [INTEGER]
BINARY
produce una cadena binaria. Consulte la entrada para el operadorBINARY
en esta sección para una descripción de cómo afecta esto a las comparaciones.El tipo
DECIMAL
está disponible desde MySQL 5.0.8.CAST()
yCONVERT(... USING ...)
son sintaxis SQL estándar. La forma no-USING
deCONVERT()
es sintaxis ODBC .CONVERT()
conUSING
se usa para convertir datos entre distintos conjuntos de carácteres. En MySQL, los nombres transcodificados son los mismos que los nombres de los conjuntos de carácteres correspondientes. Por ejemplo, este comando convierte la cadena'abc'
en el conjunto de carácteres por defecto del servidor a la cadena correspondiente en el conjunto de carácteresutf8
:SELECT CONVERT('abc' USING utf8);
-
Las funciones de conversión son útiles cuando quiere crear una
columna con un tipo específico en un comando CREATE ...
SELECT
:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
Las funciones también pueden ser útiles para ordenar columnas
ENUM
en orden léxico. Normalmente ordenar
columnas ENUM
se hace usando el valor numérico
interno. Convertir los valores en CHAR
resulta
en orden léxico:
SELECTenum_col
FROMtbl_name
ORDER BY CAST(enum_col
AS CHAR);
CAST(
str
AS BINARY)
es lo mismo que BINARY
str
.
CAST(
expr
AS CHAR)
trata la expresión como una cadena con el conjunto de carácteres
por defecto.
CAST()
cambia el resultaod si lo usa como parte
de una expresión más compleja como CONCAT('Date:
',CAST(NOW() AS DATE))
.
No debe usar CAST()
para extraer datos en datos
en distintos formatos sino usar funciones de cadenas como
LEFT()
or EXTRACT()
.
Consulte Sección 12.5, “Funciones de fecha y hora”.
Para convertir una cadena en un valor numérico en un contexto numérico, normalmente no tiene que hacer nada más que usar el valor de la cadena como si fuera un número:
mysql> SELECT 1+'1'; -> 2
Si usa un número en un contexto de cadenas, el número se
convierte automáticamente en una cadena BINARY
string.
mysql> SELECT CONCAT('hello you ',2); -> 'hello you 2'
MySQL soporta aritmética con valores con y sin signo de 64-bit.
Si usa operadores numéricos (tales como +
) y
uno de los operandos es un entero sin signo, el resultado no tiene
signo. Puede cambiar este comportamiento usando los operadores
SIGNED
y UNSIGNED
para
cambiar la operación a un entero con o sin signo de 64-bit ,
respectivamente.
mysql> SELECT CAST(1-2 AS UNSIGNED) -> 18446744073709551615 mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED); -> -1
Tenga en cuenta que si un operando es un valor de coma flotante,
el resultado es de coma flotante y no está afectado por la regla
precedente. (En este contexto, los valores de la columna
DECIMAL
se tratan como valores con punto
flotante.)
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0; -> -1.0
Si usa una cadena en una operación aritmética, se convierte en número en coma flotante.