我在读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和1序列表示的“二进制字符串”(0100 1101 0111 1001 0101 0011 0101 0001 0100 1100)。
2条答案
按热度按时间k5ifujac1#
术语“二进制字符串”通常指0和1的序列。在mysql函数unhex的情况下,它接受一个十六进制值的字符串,并将其转换为一个二进制数,该二进制数将表示为一个字符串。没什么特别的。结果将是一个字符串,它是从十六进制数转换为二进制数的结果。十六进制数在转换成二进制时是四位数。0和1的结果序列将是结果字符串的二进制表示。
swvgeqrz2#
正如mysql手册中关于binary和varbinary数据类型所说,二进制字符串
包含字节字符串而不是字符串。这意味着它们具有二进制字符集和排序规则,比较和排序基于值中字节的数值。
本质上,它们是字节数组。