MySQL UNHEX()에 해당하는 PHP 함수는 무엇일까?
PHP에서 MySQL의 UNHEX() 함수와 동일한 기능을 수행하는 함수는 바로 hex2bin()입니다. 이 함수는 16진수 문자열을 원래의 이진 데이터(바이너리)로 변환해 주며, PHP 5.4.0부터 기본으로 제공됩니다.
hex2bin() 기본 문법
$anyVariableName = hex2bin("yourHexadecimalValue");16진수 값을 인자로 전달하면, 해당 값이 디코딩되어 원본 문자열 또는 바이너리 데이터로 반환됩니다. 만약 유효하지 않은 16진수 문자열이 입력되면 false를 반환하고, PHP 7.4 이상에서는 경고(Warning)가 발생할 수 있습니다.
PHP 예제 코드
실제로 hex2bin() 함수를 사용하는 예제를 살펴보겠습니다.
$myFirstValue = hex2bin("7777772E4D7953514C4578616D706C652E636F6D");
var_dump($myFirstValue);
$mySecondValue = hex2bin("416476616E6365644A617661576974684672616D65776F726B");
echo('<br>');
var_dump($mySecondValue);실행 결과
string(18) "www.MySQLExample.com"
string(25) "AdvancedJavaWithFramework"
첫 번째 16진수 값은 "www.MySQLExample.com"으로, 두 번째 값은 "AdvancedJavaWithFramework"로 정상적으로 변환된 것을 확인할 수 있습니다.
MySQL UNHEX() 함수와 결과 비교하기
동일한 16진수 값을 MySQL의 UNHEX() 함수에 적용하면 PHP와 완전히 같은 결과를 얻을 수 있습니다.
Case 1 — www.MySQLExample.com 변환
다음과 같은 쿼리를 실행합니다.
mysql> SELECT UNHEX("7777772E4D7953514C4578616D706C652E636F6D");실행 결과는 다음과 같습니다.
+---------------------------------------------------+
| UNHEX("7777772E4D7953514C4578616D706C652E636F6D") |
+---------------------------------------------------+
| www.MySQLExample.com |
+---------------------------------------------------+
1 row in set (0.00 sec)
Case 2 — AdvancedJavaWithFramework 변환
두 번째 쿼리도 살펴보겠습니다.
mysql> SELECT UNHEX("416476616E6365644A617661576974684672616D65776F726B");실행 결과는 다음과 같습니다.
+-------------------------------------------------------------+
| UNHEX("416476616E6365644A617661576974684672616D65776F726B") |
+-------------------------------------------------------------+
| AdvancedJavaWithFramework |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
정리
MySQL의 UNHEX()와 PHP의 hex2bin()은 동일한 16진수 디코딩 작업을 수행하므로, 두 환경 간에 데이터를 주고받을 때 결과가 일치함을 보장합니다. 다만 PHP에서 hex2bin()은 유효하지 않은 입력에 대해 false를 반환하므로, 실무에서는 반드시 반환값 검증 처리를 함께 해주는 것이 좋습니다.