Смешные персонажи в моем БД - PullRequest
       21

Смешные персонажи в моем БД

0 голосов
/ 17 августа 2010

Мое веб-приложение ломается, когда я пытаюсь редактировать определенный тип контента, и я почти уверен, что это из-за некоторых странных символов в моей базе данных.Поэтому, когда я делаю:

SELECT body FROM message WHERE id = 666

, возвращается:

<p>⢠<span></span></p><p><br /></p><p><em><strong>NOTE:</strong> Please remember to use your to participate in the discussion.</em></p>

Однако, когда я пытаюсь подсчитать, сколько документов содержит эти символы, postgres жалуется:

foo_450_prod=# SELECT COUNT(*) FROM message WHERE body LIKE'%â¢%';

ERROR:  invalid byte sequence for encoding "UTF8": 0xe2a225
HINT:  This error can also happen if the byte sequence does not match the encodi

Кто-нибудь знает, в чем проблема и как я могу запросить этих забавных персонажей?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Похоже, что ваше заявление SELECT интерпретируется как ISO-8859-1 или windows-1252.В этих кодировках 'â' == 0xE2, '¢' == 0xA2 и '%' == 0x25, что объясняет последовательность байтов 0xe2a225, упомянутую в сообщении об ошибке.

Что трудно понять, так этопочему ваш первый SELECT возвращает ⢠для начала.Это маловероятная комбинация символов для использования нарочно, но это также не типичный случай моджибаке UTF-8 / windows-1252, потому что E2 A2 не является допустимым UTF-8.Это могут быть первые 2 байта символа, но этот символ будет точечным шаблоном Брайля (от U + 2880 до U + 28BF), что также не имеет смысла.

0 голосов
/ 17 августа 2010

уже есть большой путь между вашей БД и печатью некоторых данных из нее на вашей веб-странице: ваша кодировка БД может быть в порядке, но вы, вероятно, пытаетесь здесь напечатать что-то изначально в UTF-8 в ISO-8859-1а не "смешные" персонажи).у вас есть что-то вроде:

<meta content="text/html; charset=UTF-8" http-equiv="content-type" />

в теге <head> вашей HTML-страницы?

также вы устанавливаете SET NAMES 'utf8' при подключении к вашей БД?

...