Почему Unicode Charater θ не поддерживается в PGSQL

0

Я работал с Postgresql с C++ и пытался вставить символ юникода αβγδεζηθ.

Запустил запрос вставки в некоторой таблице базы данных и обнаружил, что "θ" не поддерживается символом.

Для этого я запускаю gdb. для этого символа, то есть "θ", он демонстрирует характерный характер.

  1. Могу ли я найти набор символов, поддерживаемый Postgresql.
  2. Поддерживает ли Pgsql этот символ.
  3. Есть ли способ поддержать этот персонаж.

Примечание: 1. Я использую C++ для запуска этой команды. и это не сохраняет это значение. 2. База данных является UTF8-совместимым, потому что, когда я удаляю этот запрос "θ", запрос на ввод успешно завершен.

  • 1
    Не ясно, что GDB имеет отношение к этому. «Для этого я запускаю GDB». А? За что?
  • 0
    @Craig Ringer на самом деле я отлаживаю код, я запустил запрос с C ++ в базу данных и использовал gdb для печати вывода в каждой строке, то есть с добавленной точкой останова и при печати результатов вывода в виде символов на гибриде.
Показать ещё 1 комментарий
Теги:
character-encoding

1 ответ

1
Лучший ответ

Да, PostgreSQL поддерживает θ, символ U+03b8 Greek Small Letter Theta, как в unicode escape, так и в буквальной форме:

regress=> SELECT 'θ', E'\u03b8';
 ?column? | ?column? 
----------+----------                                                                                                                                                          
 θ        | θ                                                                                                                                                                  
(1 row)                                                                                                                                                      

Предполагая, что ваша кодировка базы данных или клиентская кодировка не поддерживают ее или, скорее всего, с учетом вашего упоминания о "тарабарщике", ваш client_encoding не соответствует кодировке данных, которые вы фактически отправляете.

Проверьте кодировку базы данных с помощью \l в psql или SHOW server_encoding; , Получить клиентскую кодировку с помощью SHOW client_encoding; от клиентского соединения с проблемой.

Я бы сказал, что вы, вероятно, отправляете данные UTF-8 или UTF-16 на сервер, но сообщая серверу iso-8859-1 или windows-1252 или наоборот. Хотя θ не входит в эти кодировки; вы должны использовать что-то еще или отправлять данные, которые уже искажены другим недопустимым преобразованием, прежде чем попасть в PostgreSQL.

Было бы полезно, если бы вы показали:

  • Точная "тарабарщина" и соответствующий вход
  • Необработанные байты строки C, которые вы отправляете в PostgreSQL, в виде шестнадцатеричных экранов
  • 0
    Я проверил кодировку базы данных UTF-8. Также хочет обновить, что вы правы, что «θ» поддерживается, потому что это случайное поведение. Также на стороне клиента кодирование также в порядке. Потому что он поддерживает символы UTF8, а не 'θ', но иногда. Я выясняю, может быть какая-то проблема в коде.
  • 0
    Я уверен, что это проблема обработки набора символов в вашем коде, или что-то более тонкое, например, проблемы с памятью.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню