Как хранить символы типа ♥ ☆ в БД? - PullRequest
0 голосов
/ 10 июня 2010

Предыдущий выпуск - не удалось сохранить неанглийские символы:

Как хранить неанглийские символы?

Это было исправлено с помощью UTF8.Но сегодня понял, что такие символы, как ♥☆, хранятся неправильно.Они преобразуются в символы типа ♥☆.

Как это можно исправить?

Ответы [ 2 ]

12 голосов
/ 10 июня 2010

Мне кажется, что они правильно хранятся, но вы неправильно их интерпретируете, когда читаете их. и в конечном итоге станут многобайтовыми символами в кодировке UTF-8. Держу пари, если вы посмотрите на эту многобайтовую кодировку, вы увидите, что она такая же, как однобайтовая кодировка для ♥ и ☆ соответственно.

Редактировать: добавление деталей.

Как видно из следующей таблицы, интерпретация символов UTF-8, как если бы они были закодированы как Windows Latin-1, дает результаты, которые вы видите.

UTF-8 character      Hex
♥                    e2 99 a5
☆                    e2 98 86

Windows Latin-1      Hex
â                    e2
™                    99
¥                    a5
˜                    98
†                    86
2 голосов
/ 10 июня 2010

UTF8 используется последовательно во всем спектре (MySQL, PHP, Apache, s, заголовки ...)?

Для меня это сработало из коробки:

$query = "update tbl set col = '♥☆' where id = 1";
mysql_query($query) or die(mysql_error());
$query = "select col from tbl where id = 1";
$res = mysql_query($query) or die(mysql_error());
print_r(mysql_fetch_row($res));

Отладочный вывод:

Content-type: text/html; charset=utf-8
Array
(
    [0] => ♥☆
)
...