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 como
BINARY
o BLOB
.
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
es
una abreviación de
str
CAST(
.
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 caracteres, y por lo tanto no tienen concepto de
mayúsculas. Para una comparación no sensible a mayúsculas,
use la función CONVERT()
para convertir el
valor de cadena a un conjunto de caracteres no sensible a
mayúsculas. El resultado es una cadena no binaria. El
resultado es una cadena no binaria, así que la operación
LIKE
no es sensible a mayúsculas:
SELECT 'A' LIKE CONVERT(blob_col
USING latin1) FROMtbl_name
;
Para usar un conjunto de caracteres 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 caracteres.
CAST(
,
expr
AS
type
)CONVERT(
, expr
,type
)CONVERT(
expr
USING
transcoding_name
)
Las funciones CAST()
y
CONVERT()
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 operador BINARY
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()
y CONVERT(... USING
...)
son sintaxis SQL estándar. La forma
no-USING
de CONVERT()
es
sintaxis ODBC .
CONVERT()
con USING
se
usa para convertir datos entre distintos conjuntos de
caracteres. En MySQL, los nombres transcodificados son los
mismos que los nombres de los conjuntos de caracteres
correspondientes. Por ejemplo, este comando convierte la
cadena 'abc'
en el conjunto de caracteres
por defecto del servidor a la cadena correspondiente en el
conjunto de caracteres utf8
:
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(
es lo mismo que str
AS BINARY)BINARY
.
str
CAST(
trata la expresión como una cadena con el conjunto de caracteres
por defecto.
expr
AS CHAR)
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.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.