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)))
不得不同时使用这两个,这是我一开始没有看到的。
我希望这对以后的人有所帮助。
干杯。
我有一个数据库,我正试图从中提取一些数据,我们正在将一个客户从另一个客户转换到我们的系统,源数据库有一个名为 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)))
不得不同时使用这两个,这是我一开始没有看到的。
我希望这对以后的人有所帮助。
干杯。