【问题标题】:How to generate characters in different encodings using MySQL?如何使用 MySQL 生成不同编码的字符?
【发布时间】:2012-05-30 12:27:33
【问题描述】:

我正在尝试使用 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

有没有办法在 MySQL 中做到这一点?

回答

感谢lanzz

SET @id = 45678;
SELECT
    @id,
    CHAR(@id USING utf32),
    CONVERT(CHAR(@id USING utf32) USING utf16),
    CONVERT(CHAR(@id USING utf32) USING utf8),
    HEX(CHAR(@id USING utf32)),
    HEX(CONVERT(CHAR(@id USING utf32) USING utf16)),
    HEX(CONVERT(CHAR(@id USING utf32) USING utf8));

结果:

45678
뉮
뉮
뉮
0000B26E
B26E
EB89AE

【问题讨论】:

  • 只有转成UTF8需要CONVERT()部分;如您所见,CHAR() 足以生成 UTF16 和 UTF32。
  • 尝试@id = 66600,它会给出不同的结果。奇怪:-T
  • 啊,是的,代理对仍然需要CONVERT()
  • 您从哪里获得这些信息?听起来很有趣。
  • 在这种情况下,维基百科。如果它不在 wiki 页面中,它至少会有指向那里实际标准的链接。

标签: mysql unicode encoding


【解决方案1】:

试试CONVERT(CHAR(678 USING UTF16) USING UTF8)CHAR() 调用会将您的 unicode 字符代码转换为实际的字符串,CONVERT() 会将该字符串转换为实际的 UTF8。

【讨论】:

  • 糟糕,应该使用USING 而不是逗号。
【解决方案2】:

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

【讨论】:

  • 我的问题是:有没有办法在 MySQL 中做到这一点?
  • @eisberg:有没有办法what?将该字节序列转换为 UTF-8 是没有意义的。
  • 我想将任意整数转换为 UTF-32、UTF-16、UTF-8 等中的等效字符。
  • @eisberg:但是不可能将 any 整数转换为 UTF-8。并非所有字节序列/整数都是有效的 UTF-8 编码。
  • 我知道您的目标是什么,但是以大多数其他方式进行转换(例如 PHP 中的 mb_*-functions)将返回一个空字符串或其他一些线索,即无法转换此特定字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2018-07-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多