mysql - MySQL获取字符串中的X字节
问题描述
我有一个数据库,我试图从中提取一些数据,我们正在将一个客户从另一个客户转换到我们的系统,并且源数据库有一个名为line
varchar 的字段。
但是该字段不只包含文本,字符串的第一个 x 字节是状态代码,它们只是字节,因此作为示例Â foo
,在十六进制编辑器中读取时可能会读取一行03 C2 A0 66 6F 6F
我正在尝试在 MySQL 中运行查询以显示第三个字节的内容,但是我没有得到正确的结果。我怀疑 MySQL 将字符视为 UTF-8,当我使用子字符串时,我得到一个两字节字符
我尝试了几件事,第一件事是HEX(ASCII(SUBSTRING(CONVERT(line USING utf8mb4), 3, 1)))
。我还尝试将 '''CONVERT(line USING utf8mb4)''' 替换为 '''CONVERT(line, BINARY) ''' 这会产生相同的结果。
当我读到第一个字符时,我得到了 03,我读到了第二个字符,我得到了 C2,当我尝试第三个字符时,我得到了 0 而不是 A0。
我刚刚尝试从该字段复制输出并将其作为字符串文字,并且效果很好,只有在从数据库中读取它时。
这有效
HEX(ASCII(SUBSTRING(CONVERT('Â ', BINARY),3, 1)))
-- 字符串为以下十六进制值 03C2A0
这不起作用
HEX(ASCII(SUBSTRING(CONVERT(line, BINARY),1, 1)))
-- 行包含与上述示例相同的字符串。
关于什么会起作用的任何建议?理想情况下,我需要将此作为查询而不是任何后期操作。
谢谢安迪。
解决方案
几天后我确实明白了这一点。我确实认为我发布了我自己问题的解决方案。
就像将行数据转换为 utf8mb4 然后转换为二进制一样简单,这让我可以访问行中的每个字节。
HEX(ASCII(substring(CONVERT(CONVERT(line using utf8mb4), BINARY),4,1)))
必须同时使用两者,这是我一开始没有看到的。
我希望这可以帮助将来的人。
干杯。
推荐阅读
- python - When i tried to run auth login api getting error : The current path, api/auth/login/, didn't match any of these
- apache-plc4x - Plc4x addressing system
- elasticsearch - ElastifcSearch UpdateByQueryRequest 从 6.2 到 7.4.2
- swift - UITextField 清除按钮颜色 Swift
- c# - 将 Angular FormData 中的 int 列表发送到 C# 中的 POST Web API
- php - mcrypt 没有与 php 5.6 一起安装
- c# - Sql Azure:暂时失败
- r - 如何标记我的行和列以便更好地使用它们?
- wildfly-swarm - 在多模块 Gradle 项目中将 Thorntail Swarm 配置 (project-defaults.yml) 放在哪里?
- json - 使用 jq 解析没有分隔符的 JSON 字符串