如何使用MySQL生成不同编码的字符?

如何使用MySQL生成不同编码的字符?,mysql,unicode,encoding,Mysql,Unicode,Encoding,我正在尝试使用MySQL生成不同编码的字符 我的脚本如下所示: SET @id := 678; SELECT @id, CHAR(@id USING utf32), CHAR(@id USING utf16), CHAR(@id USING utf8), HEX(CHAR(@id USING utf32)), HEX(CHAR(@id USING utf16)), HEX(CHAR(@id USING utf8)) 我的预期结果是: 67

我正在尝试使用MySQL生成不同编码的字符

我的脚本如下所示:

SET @id := 678;
SELECT
    @id,
    CHAR(@id USING utf32),
    CHAR(@id USING utf16),
    CHAR(@id USING utf8),
    HEX(CHAR(@id USING utf32)),
    HEX(CHAR(@id USING utf16)),
    HEX(CHAR(@id USING utf8))
我的预期结果是:

678
ʦ
ʦ
ʦ
000002A6
02A6
CAA6
我实际得到的是:

678
ʦ
ʦ
            <-- Questionable
000002A6
02A6
02          <-- Questionable
结果:

45678
뉮
뉮
뉮
0000B26E
B26E
EB89AE

尝试
转换(字符(678使用UTF16)使用UTF8)
。调用
CHAR()
会将unicode字符代码转换为实际字符串,而
convert()
会将该字符串转换为实际UTF8。

UTF-8中的字节序列
0x02A6
(十进制678)是;第一个字节解码为,但第二个字节没有解码。

我的问题是:在MySQL中有办法做到这一点吗?@eisberg:有办法做到什么?将该字节序列转换为UTF-8是毫无意义的。我想将任何整数转换为UTF-32、UTF-16、UTF-8等格式中的等效字符。@eisberg:但无法将任何整数转换为UTF-8。并非所有字节序列/整数都是有效的UTF-8编码。我知道您的目标是什么,但以大多数其他方式(如PHP中的mb_*-函数)进行转换将返回空字符串或其他线索,表明此特定字符无法转换。Oops,应使用而不是逗号进行
。只有转换为UTF8需要
CONVERT()
部分;正如您自己所看到的,
CHAR()
足以生成UTF16和UTF32。请尝试@id=66600,它会给出不同的结果。奇怪:-TAh,是的,
CONVERT()
仍然需要代理项对。您从哪里获得此信息的?听起来很有趣。在这个例子中,维基百科。如果它不在wiki页面中,它至少会有指向那里实际标准的链接。
45678
뉮
뉮
뉮
0000B26E
B26E
EB89AE