MySQL CHAR()函数和UTF8输出?

jas*_*son 5 mysql unicode escaping utf-8 string-literals

+--------------------------+--------------------------------------------------------+
| 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.

谢谢

Mar*_*tin 7

您将UTF-8与Unicode混淆.

0x00FC是ü 的Unicode代码点:

mysql> select char(0x00FC using ucs2);
+----------------------+
| char(0x00FC using ucs2) |
+----------------------+
| ü                   | 
+----------------------+
Run Code Online (Sandbox Code Playgroud)

UTF-8编码中,0x00FC 由两个字节表示:

mysql> select char(0xC3BC using utf8);
+-------------------------+
| char(0xC3BC using utf8) |
+-------------------------+
| ü                      | 
+-------------------------+
Run Code Online (Sandbox Code Playgroud)

UTF-8只是一种以二进制形式编码 Unicode字符的方法.这意味着节省空间,这就是为什么ASCII字符只占用一个字节,而iso-8859-1字符如ü只占用两个字节.其他一些字符需要三到四个字节,但它们不常见.