1. 程式人生 > >MYSQL中HEX、UNHEX函式

MYSQL中HEX、UNHEX函式

1、 首先在Xshell下檢視本次實驗mysql版本


2、 然後連線到Mysql伺服器上

 

3、 首先我們對UNHEX函式進行測試

HEX()函式:返回十六進位制值的字串表示形式。注意:並不是十進位制轉化為十六進位制數,而是轉化為字串。。。

UNHEX() 函式: 每對十六進位制數字轉化為一個字元。

下面是HEX()幾個簡單的例子:

重點是UNHEX函式:

剛開始我以為該函式功能是將16進位制數轉化為十進位制數(下面是我出錯的例子):

錯誤:十六進位制1f代表十進位制31
mysql> select unhex('1f');
+-------------+
| unhex('1f') |
+-------------+
| |
+-------------+
1 row in set (0.00 sec)

錯誤:十六進位制1a2b3c代表十進位制1715004
mysql> select unhex('1a2b3c');
+-----------------+
| unhex('1a2b3c') |
+-----------------+
| +< |
+-----------------+
1 row in set (0.00 sec)

和我所認為的正確答案不一樣。。。為什麼出錯了?

回再來看下該函式功能:UNHEX() 函式: 每對十六進位制數字轉化為一個字元。


該圖是ASCII碼對應的十六進位制數和字元

紅色圈起來的部分是我們UNHEX函式的運算元也就是輸入。在這裡還有一點要說明:HEX()函式:返回十六進位制值的字串表示形式。所以UNHEX函式的運算元需帶上單引號。。。

藍色代表的部分是我出錯的原因,是我預期的輸出值。

綠色代表的是正確的輸出值。

接下來再看幾個例子:


轉化A時並沒有出現數字10,而是數字10的ASCII字元(LF),該字元無法正確輸出。。。

再來看下剛才出錯的例子:



同樣的並沒有出現數字31,而是數字31的ASCII字元(US),該字元無法正確輸出。。。

微笑


十六進位制21代表的十進位制數是33,,33代表的ASCII碼是!,所以正確了。。。吐舌頭

同理:


最後一個:


希望能幫助到其他人。剛開始寫部落格,請大家多多包涵。微笑