Не могу вставить глиф юникода в mysql - PullRequest
5 голосов
/ 09 марта 2011

С этим запросом:

UPDATE  `arg`.`arg_currency` SET  `symbol` =  '?' WHERE  `arg_currency`.`id` =2 LIMIT 1 ;

Я получаю эту ошибку:

Предупреждение: # 1366 Неверное строковое значение: '\ xF0 \ x90 \ x80 \ xA4' для столбца'symbol' в строке 1

Столбец symbol был CHAR(1) utf8_roman_ci, но я оба пытался изменить параметры сортировки на _general и на _unicode, а символы на 4, но я все еще получаю ту же ошибку.

Что я делаю не так?

(я оба пытался вставить его через пользовательский код php и через phpmyadmin)

Ответы [ 2 ]

6 голосов
/ 09 марта 2011

Как указывает @CarpeNoctumDC, этот вопрос объясняет проблему:

MySQL не хочет хранить символы Юникода

MySQL поддерживает символы только из базовой многоязычной плоскости (0x0000 - 0xFFFF).

Ваш персонаж отсутствует, если этот самолет.

В вашем случае я бы обошел это, сохранив символ в виде числовой сущности. htmlentities() с заданной кодировкой UTF-8 должен иметь возможность, например, создавать его сущность. нет, это не так.

Эта функция в примечаниях пользователя руководства по PHP работает для меня: она преобразует символ в числовой объект.

echo utf8tohtml("?", true); // echoes 𐀤
0 голосов
/ 09 марта 2011

это '?' в какой кодировке ??сначала попытайтесь преобразовать из вашей кодировки в кодировку таблицы MySQL в php, используя iconv() http://php.net/manual/en/function.iconv.php

ОБНОВЛЕНИЕ:

похоже, что '?' был закодирован на лету в строку \xF0\x90\x80\xA4, если ваше поле CHAR (1), оно не подходит и возвращает ошибку - нужно выяснить, почему оно закодировано.

...