MySQL CHAR () функция и вывод UTF8?

+--------------------------+--------------------------------------------------------+
| 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 символа-> "Б" вместо"?" испытанного символа (0x00FC использующий utf8) также, но никакие не идут.

Используя mysql версию 5.1.41

Со всех сторон Google, ничего не может найти на этом. В документах MySQL просто говорится, что многобайтовый вывод ожидается на значениях, больше, чем 255, после mysql версия 5.0.14.

Спасибо

5
задан Solomon Rutzky 27 June 2019 в 14:51
поделиться

1 ответ

Вы путаете UTF-8 с Unicode.

0x00FC - это кодовая точка Unicode для ü:

mysql> select char(0x00FC using ucs2);
+----------------------+
| char(0x00FC using ucs2) |
+----------------------+
| ü                   | 
+----------------------+

В кодировке UTF-8 , 0x00FC представлен двумя байтами :

mysql> select char(0xC3BC using utf8);
+-------------------------+
| char(0xC3BC using utf8) |
+-------------------------+
| ü                      | 
+-------------------------+

UTF -8 - это просто способ кодирования символов Unicode в двоичной форме. Он предназначен для экономии места, поэтому символы ASCII занимают только один байт, а символы iso-8859-1, такие как ü, занимают только два байта. Некоторые другие символы занимают три или четыре байта, но они встречаются гораздо реже.

7
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: