MySql从utf8代码点到utf16代码点并返回?

时间:2014-03-20 21:28:32

标签: mysql unicode utf-8

基于好汉字的例子(utf8:E5A5BD,utf16:597D),MySQL 5.5.35 UTF-8 Unicode

我可以从角色获得UTF-8代码点:

SELECT HEX('好');

=> E5A5BD

我可以从UTF-16代码点获得UTF-16编码字符:

SELECT CHAR(0x597D USING utf16);

=> 好

但是如何获得相关的UTF-8代码点?

我无法弄清楚如何从UTF-8代码点回到任何地方,既不是字符也不是UTF-16代码点。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用CONVERT函数对UTF-8中的字符串进行编码,然后使用HEX函数来获取十六进制表示。

SELECT hex(convert(CHAR(0x597D using utf16) using utf8));

=> E5A5BD

答案 1 :(得分:0)

如果你想检查表情符号(U + 10000及更高版本);

// initialize character set utf8mb4
SET NAMES 'utf8mb4';

// codepoint: U+1F42C (DOLPHIN)
// UTF-32: 0x0001F42C
// UTF-16: 0xD83D 0xDC2C
// UTF-8 : 0xF0 0x9F 0x90 0xAC

// UTF-32 -> UTF-16
// result: D83DDC2C
SELECT HEX(CONVERT(CHAR(0x1F42C using utf32) using utf16));

// UTF-16 -> UTF-8
// result: F09F90AC
SELECT HEX(CONVERT(CHAR(0xD83DDC2C USING utf16) USING utf8mb4));

// UTF-8 -> UTF-32
// result: 0001F42C
SELECT HEX(CONVERT(CHAR(0xF09F90AC USING utf8mb4) USING utf32));