MySQL 获取字符串中的 X 字节

MySQL getting the X byte in a string

我有一个数据库,我正试图从中提取一些数据,我们正在将一个客户从另一个客户转换到我们的系统,源数据库有一个名为 line 的字段,它是一个 varchar。

但是该字段不仅仅包含文本,字符串的第一个 x 字节是状态代码,它们只是字节,因此作为示例,一行可能显示为 Â foo,在十六进制编辑器中读取时为03 C2 A0 66 6F 6F

我正在尝试 MySQL 到 运行 查询以显示第 3 个字节的内容,但是我没有得到正确的结果。我怀疑 MySQL 将字符视为 UTF-8,当我子串时,我得到一个两字节字符

我尝试了一些东西,第一个是 HEX(ASCII(SUBSTRING(CONVERT(line USING utf8mb4), 3, 1)))。我还尝试用“'CONVERT(line, BINARY) '”替换“'CONVERT(line USING utf8mb4)'”,结果相同。

当我读取第一个字符时返回 03,读取第二个字符时返回 C2,当我尝试读取第三个字符时返回 0 而不是 A0。

我刚刚尝试复制该字段的输出并将其作为字符串文字并且工作正常,仅当它从数据库中读取时才有效。

这有效

HEX(ASCII(SUBSTRING(CONVERT(' ', BINARY),3, 1))) -- 字符串是以下十六进制值 03C2A0

这行不通

HEX(ASCII(SUBSTRING(CONVERT(line, BINARY),1, 1))) -- 行包含与上例相同的字符串。

有什么建议吗?理想情况下,我需要让它作为查询而不是任何 post 操作来工作。

谢谢 安迪.

几天后我确实弄明白了。我确实认为我发布了我自己问题的解决方案。

就像将行数据转换成 utf8mb4 然后转换成二进制一样简单,这样我就可以访问行中的每个字节。

HEX(ASCII(substring(CONVERT(CONVERT(line using utf8mb4), BINARY),4,1)))

不得不同时使用这两个,这是我一开始没有看到的。

我希望这对以后的人有所帮助。

干杯。