mysql | Literales hexadecimales

Literal:
Se puede definir como el valor dado a variables o constantes.

Ejemplo:

int f = 2 

Aquí f es la variable y 2 es el literal numérico.

Literal hexadecimal:
Son los números enteros cuya base es 16 (en sistema de numeración).

Ejemplo:

int y = X'12A' 

Un literal hexadecimal debe estar precedido por 0x o X, su valor es 12A, es decir, equivalente a 298 en el sistema numérico decimal.

Sintaxis:
Los valores literales hexadecimales se escriben de la siguiente forma:

X'val' 
x'val'
0xval  

val representa cualquier número hexadecimal, es decir, cualquier dígito en el rango (0, 1, …..D, E, F). En la notación 0xval, 0x distingue entre mayúsculas y minúsculas, por lo que no se puede escribir como 0X’val’. Sin embargo, las mayúsculas y minúsculas de los dígitos que preceden a X o 0x no distinguen entre mayúsculas y minúsculas.

Ejemplos:
estos son literales válidos.

X'015'
X'01aF'
x'BC'
x'2d'
0x7e4
0x88bA

Estos son literales inválidos.

X'1s' // s is not in range (0, 1, ...A, .., F)
0X'1'  // OX is not a valid notation, 
       // correct notation is 0x 

Nota: La notación de forma X’val’ o x’val’ no contiene ni dígitos; de lo contrario, se generará un error de sintaxis.

mysql>select X'3' 

ERROR 1064: Tiene un error en su sintaxis SQL; Consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de ‘X’3”.

Rellenando cero al principio de la string, se puede evitar el error.

mysql> select X'03' 
               ->♥ 

Si los valores escritos en forma 0xval contienen un número impar de dígitos, entonces se trata como si contuviera un cero inicial adicional al comienzo del valor. Como, 0x123 se trata como 0x0123.

Representación predeterminada:
de forma predeterminada, el literal hexadecimal es una string binaria donde cada par representa un carácter.

Ejemplo:

mysql>select 0x65;
             -> e
mysql>select 5461626c65;
         -> Table
mysql>select 0x465;
         -> ♦e 

Aquí, en el último literal 0x465, la salida es ‘♦e’ porque 65 representa la letra ‘e’ y 4 representa ♦.

Un valor literal hexadecimal vacío (X’ ‘) es una string binaria de longitud cero.

mysql>select X'', length(X'')
       -> binary 0 

Operaciones con literales hexadecimales –

  1. Operación COLLATE:
    el conjunto de caracteres predeterminado del literal hexadecimal se puede cambiar utilizando un introductor de conjunto de caracteres opcional y una cláusula COLLATE para convertirlo en una string de conjunto de caracteres y colación en particular.

    Sintaxis:

    [_charset_name] literal [COLLATE collation_name]

    Ejemplo:

    mysql>select _utf8 X'4745454B'
         -> GEEK
    mysql>select _utf8 X'4745454B' COLLATE utf8_danish_ci;
         -> GEEK
    
  2. Operaciones TBI;
    mysql>select X'01' | X'02', hex(X'01' | X'02')
          -> 3 3
    mysql>select _binary X'01' | X'02', hex(_binary X'01' | X'02')
          -> ♥ 03 

    Para los literales hexadecimales, las operaciones con bits dan como resultado un valor BIGINT. Como en el código anterior, sin usar el introductor _binary, no se muestra el bit más significativo que contiene cero. Entonces, al usar el introductor _binary podemos especificarlos explícitamente en el contexto binario.

  3. Operaciones aritméticas:
    en contexto numérico, los literales hexadecimales se tratan como BIGINT (entero de 64 bits). Para contexto numérico, podemos usar operadores aritméticos como +, -, *, /, %;
    mysql>select 0x67+0
          -> 103
    mysql>select 0x45*2
          -> 138
    
  4. Diversión HEX() / UNHEX():
    podemos usar la función integrada HEX() para convertir una string o un número en una string hexadecimal.
    mysql>select hex('e')
          -> 65
    mysql>select hex('table')
          -> 5461626C65
    

    De manera similar, la función UNHEX() se usa para convertir cada par de dígitos hexadecimales en el carácter correspondiente.

    mysql>select unhex('5645')
           ->VE   
    mysql>select unhex('qq')
           ->NULL      
    

    En la última consulta estamos deshaciendo los dígitos no hexadecimales, es decir (‘qq’) que devuelven NULL.

Publicación traducida automáticamente

Artículo escrito por Tanvi_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *