Mysql / Phpmyadmin hex ASCII / BINARY

时间:2017-01-03 19:52:10

标签: mysql phpmyadmin hex

我正在尝试将char(20)中的值转换为hex varchar(40)。

值为

  

_ÆúÛlw|™

在我使用hex后,它给了我40char list

  

5FC386C3BAC39B6C77C2A6E284A2E280B9510C7C

但是根据我的研究,转换并不好。实际的十六进制应该是

  

5FC6FADB6C77A6998B510C7CDD0419AD221A39D5

问题是,如果所有事情都已到位并使用,十六进制过程没有按计划进行?

我使用了phpmyadmin。使用的命令是

UPDATE tablename SET col2name =hex(col1name);

col2name = varchar(40)

col1name = char(20)

p.s我已经将第一个值带到某个解密站点并使用ASCII到HEX,并使用良好的值进行转换。

1 个答案:

答案 0 :(得分:0)

我认为“ASCII to HEX”转换器返回了不同的十六进制表示,因为输入被指定为ASCII而不是UTF-8。

字符串Æ中的第二个字符 似乎是拉丁文大写字母AE diphthong。

显示为HEX的UTF-8编码为 DeliveryGoal = 85%; 。这是MySQL HEX函数返回的内容。

如果MySQL会话正在使用 utf8 characterset,那么似乎MySQL C386函数返回了我们期望的字符串。 (我只是检查第二个角色。)

看起来观察到的MySQL行为与文档规范一致。

值是CHAR(20),但 characterset 是什么值?从我们看到的,它看起来不像ASCII或扩展ASCII。它看起来像是UTF-8。

参考文献:

绝对最低每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)

https://www.joelonsoftware.com/articles/Unicode.html

每个程序员绝对需要了解编码和字符集以处理文本

http://kunststube.net/encoding/

关注

HEX
SELECT HEX('_ÆúÛlw¦™‹Q|Ý­"9Õ') AS utf8
utf8                                                    
------------------------------------------------------
5FC386C3BAC39B6C77C2A6E284A2E280B9517CC39DC2AD2239C395  
SELECT HEX(CONVERT('_ÆúÛlw¦™‹Q|Ý­"9Õ' USING latin1)) AS latin1

utf8编码

latin1                            
--------------------------------
5FC6FADB6C77A6998B517CDDAD2239D5  

latin1编码

HEX('_')  HEX('Æ')  HEX('ú')  HEX('Û')  HEX('l')  HEX('w')  HEX('¦')  HEX('™')
--------  --------  -------- ---------  --------  --------  --------  --------  
5F        C386      C3BA      C39B      6C        77        C2A6      E284A2

HEX('‹')  HEX('Q')  HEX('|')  HEX('Ý')  HEX('­')   HEX('"')  HEX('9')  HEX('Õ')  
--------  --------  --------  --------  --------  --------  --------  ---------
E280B9    51        7C        C39D      C2AD      22        39        C395

如果我们以您说的“正确”的十六进制表示开头,并显示UTF8编码...

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
5F C6 FA DB 6C 77 A6 99 8B 51 7C DD AD 22 39 D5

我们看到该字符串包含四个不可打印的字符。并且该编码需要31个字节,或62个十六进制数字。