Почему Unicode Charater θ не поддерживается в PGSQL
Я работал с Postgresql с C++ и пытался вставить символ юникода αβγδεζηθ.
Запустил запрос вставки в некоторую таблицу базы данных и обнаружил, что "θ" не является поддерживаемым символом.
Для этого я запускаю GDB. для этого символа, то есть 'θ', он показывает иероглифический символ.
- Могу ли я найти набор символов, поддерживаемый Postgresql.
- Поддерживает ли Pgsql этот символ?
- Есть ли способ поддержать этого персонажа.
Примечание: 1. Я использую C++ для запуска этой команды. и это не сохраняет это значение. 2. База данных совместима с UTF8, потому что, когда я удаляю этот "θ", запрос на вставку запускается успешно.
1 ответ
Да, PostgreSQL поддерживает θ
, характер U+03b8
Греческая строчная буква Theta, как в кодировке Unicode, так и в буквальной форме:
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, в виде шестнадцатеричных кодов