MySQL obsahuje různé funkce, které vám mohou pomoci při práci s hexadecimálními hodnotami. Jednou z nejviditelnějších funkcí je HEX()
funkce, která vám umožňuje převést řetězec na jeho hexadecimální ekvivalent.
Mohou však nastat situace, kdy budete chtít převést hexadecimální řetězec zpět na čitelnější řetězec. O tom je tento článek.
Zde jsou tři způsoby, jak „odemknout“ řetězec v MySQL:
UNHEX()
funkceX
hexadecimální zápis0x
zápis
Níže jsou uvedeny příklady každé z těchto metod.
Funkce UNHEX()
Toto je řetězcová funkce vytvořená speciálně pro „unhexing“ hexadecimálního řetězce.
Příklad:
SELECT UNHEX('4361747320616E6420646F6773');
Výsledek:
+-------------------------------------+ | UNHEX('4361747320616E6420646F6773') | +-------------------------------------+ | Cats and dogs | +-------------------------------------+
Způsob UNHEX()
funguje tak, že interpretuje každou dvojici znaků v argumentu jako hexadecimální číslo a převádí je na bajt reprezentovaný číslem. Návratová hodnota je binární řetězec.
Zápis X
Alternativním způsobem, jak z řetězce odstranit hex, je použít X
notace.
Příklad:
SELECT X'4361747320616E6420646F6773';
Výsledek:
+-------------------------------+ | X'4361747320616E6420646F6773' | +-------------------------------+ | Cats and dogs | +-------------------------------+
X
zápis je založen na standardním SQL. Tento zápis nerozlišuje velká a malá písmena, takže nezáleží na tom, zda použijete velké X
nebo malá písmena. To je v kontrastu s 0x
zápis, který rozlišuje velká a malá písmena.
Všimněte si, že X
zápis vyžaduje sudý počet číslic. Pokud máte lichý počet číslic, můžete jej doplnit úvodní nulou.
Zápis 0x
A třetí způsob, jak unhex řetězec odstranit, je použít 0x
notace.
Příklad:
SELECT 0x4361747320616E6420646F6773;
Výsledek:
+------------------------------+ | 0x4361747320616E6420646F6773 | +------------------------------+ | Cats and dogs | +------------------------------+
0x
zápis je založen na ODBC, pro které se často používají hexadecimální řetězce k zadání hodnot pro sloupce BLOB. Jak již bylo zmíněno, 0x
zápis rozlišuje velká a malá písmena, takže nebude fungovat, pokud použijete velké X
.
0x
zápis sice funguje s lichým počtem číslic, ale pouze proto, že bude interpretovat jakékoli liché číslo jako s úvodní nulou (takže bude sudé).
Zrušte hexadecimální kód čísla
Všimněte si, že HEX()
funkce nefunguje na číslech. Chcete-li to provést, použijte CONV()
(viz Jak zrušit hex čísla v MySQL).