+--------------------------+--------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.1.41-osx10.5-x86_64/share/charsets/ | +--------------------------+--------------------------------------------------------+ 8 rows in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.1.41 | +-----------+ 1 row in set (0.00 sec) mysql> select char(0x00FC); +--------------+ | char(0x00FC) | +--------------+ | ? | +--------------+ 1 row in set (0.00 sec)
期待实际的utf8字符 - > “ü”而不是“?”尝试char(使用utf8的0x00FC),但没有去。
使用mysql版本5.1.41
全面了谷歌,在这上面找不到任何东西。 MySQL文档简单地说,在mysql 5.0.14之后,预期多值输出的值大于255。
由于
答案 0 :(得分:7)
您将UTF-8与Unicode混淆。
0x00FC是ü:
的 Unicode 代码点mysql> select char(0x00FC using ucs2);
+----------------------+
| char(0x00FC using ucs2) |
+----------------------+
| ü |
+----------------------+
在 UTF-8 编码中,0x00FC is represented by two bytes:
mysql> select char(0xC3BC using utf8);
+-------------------------+
| char(0xC3BC using utf8) |
+-------------------------+
| ü |
+-------------------------+
UTF-8只是一种以二进制形式编码 Unicode字符的方式。它意味着节省空间,这就是为什么ASCII字符只占用一个字节,而iso-8859-1字符如ü只占用两个字节。其他一些字符需要三到四个字节,但它们不常见。
答案 1 :(得分:0)
添加到Martin's answer:
您可以使用“介绍人”代替CHAR()
函数。为此,请在代码点之前指定带有下划线的前缀的编码:
_utf16 0xFC
或:
_utf16 0x00FC
如果目标是指定代码点而不是编码的字节序列,那么您需要使用一种编码,其中代码点的值恰好是编码的字节序列。例如,如马丁的答案所示,0x00FC
既是ü
的代码点值,又是ucs2
/ utf16
的编码字节序列(它们实际上是相同的编码用于BMP字符,但我更喜欢使用“ utf16”,因为它与“ utf8”和“ utf32”一致,并且与“ utf”主题一致)。
但是,就指定代码点值而言,utf16
仅适用于BMP字符(代码点U + 0000-U + FFFF)。如果需要补充字符,则需要使用utf32
编码。 _utf32 0xFC
不仅返回ü
,而且:
_utf32 0x1F47E
返回:?
有关这些选项的更多详细信息,以及其他语言和平台的Unicode转义序列,请参阅我的文章:
Unicode Escape Sequences Across Various Languages and Platforms (including Supplementary Characters)