“二进制字符串”在MySQL中是什么意思

时间:2018-08-25 15:17:58

标签: mysql

我正在读the doc of MySQL。我在其中找到UNHEX函数的地方描述为:

  

对于字符串参数str,UNHEX(str)将参数中的每对字符解释为十六进制数字,并将其转换为该数字表示的字节。 返回值为二进制字符串。

mysql> SELECT UNHEX('4D7953514C');
        -> 'MySQL'
mysql> SELECT X'4D7953514C';
        -> 'MySQL'
mysql> SELECT UNHEX(HEX('string'));
        -> 'string'
mysql> SELECT HEX(UNHEX('1267'));
        -> '1267'

什么是“二进制字符串”?是通用术语还是MySQL中专门使用的术语?

我认为,如果它是“二进制”数据,则不应将其称为“字符串”(字符数组)。所以我想知道什么是“二进制字符串”?是“字节数组”吗?

我假设最终每个数据类型都将转换为二进制数据。 MySQL中的“字符串类型”也是如此。与“字符串”和“二进制字符串”的不同之处在于,“字符字符串”具有一些有关MySQL将其从二进制转换为字符串时要使用哪种编码模式和排序规则的信息。

所以我不太明白的是,为什么UNHEX('4D7953514C')返回“字符字符串” 'MySQL',而不返回由0和1s序列表示的“二进制字符串”(0100 1101 0111 1001 0101 0011 0101 0001 0100 1100)。

2 个答案:

答案 0 :(得分:1)

术语“二进制字符串”通常表示0和1的序列。对于MySQL函数unhex,它采用十六进制值的字符串并将其转换为二进制数,该二进制数将表示为字符串。这里没什么好看的。结果将是一个字符串,这是从十六进制数转换为二进制数的结果。转换为二进制时,十六进制数为四位数。结果0和1的序列将是结果字符串的二进制表示形式。

答案 1 :(得分:1)

正如binary and varbinary data type上的mysql手册所述,二进制字符串

  

包含字节字符串而不是字符串。这意味着它们具有二进制字符集和排序规则,并且比较和排序基于值中字节的数字值。

本质上,它们是字节数组。