如何在MariaDB中获取UTF-16 LE格式的二进制字符串?
如何在MariaDB中获取UTF-16 LE格式的二进制字符串序列?
问题背景
在MariaDB中执行以下查询:
SELECT HEX(BINARY(CONVERT('ßÁÁÁÁÁȵ$€Łß' USING ucs2)));
得到的结果为:
00DF00C100C100C100C100C1010C00B5002420AC014100DF
该序列为**UTF-16 BE(大端序)**格式。
而在MS SQL Server中执行等价查询:
SELECT CONVERT(varbinary(100), N'ßÁÁÁÁÁȵ$€Łß',0)
返回的是**UTF-16 LE(小端序)**格式的结果:
0xDF00C100C100C100C100C1000C01B5002400AC204101DF00
解决方案
方案1:直接使用utf16le字符集转换
MariaDB支持utf16le字符集(对应UTF-16小端序),可以直接通过字符集转换得到目标格式:
SELECT HEX(BINARY(CONVERT('ßÁÁÁÁÁȵ$€Łß' USING utf16le)));
执行后将输出与MS SQL Server一致的UTF-16 LE格式十六进制序列:DF00C100C100C100C100C1000C01B5002400AC204101DF00
方案2:反转UTF-16 BE的字节对
若你的MariaDB版本不支持utf16le字符集,可先获取UTF-16 BE的十六进制结果,再通过正则表达式反转每两个字节的顺序:
SELECT REGEXP_REPLACE( HEX(BINARY(CONVERT('ßÁÁÁÁÁȵ$€Łß' USING ucs2))), '(..)(..)', '\\2\\1' );
此方法会将UTF-16 BE的十六进制字符串按双字节单元反转顺序,最终生成UTF-16 LE格式的序列。
内容的提问来源于stack exchange,提问作者Jaroslav Zeman
相关产品推荐
相关产品推荐

