为什么PSQL不支持UnicodeCharacterθ

时间:2014-07-21 10:46:14

标签: c++ postgresql character-encoding

我正在使用C ++编写Postgresql并尝试插入unicode字符αβγδεζηθ。

在某些数据库表中触发插入查询,发现'θ'不支持字符。

为此我运行gdb。对于这个角色,即'θ',它显示出狡猾的角色。

  1. 我能找到Postgresql支持的字符集吗?
  2. Pgsql是否支持此字符。
  3. 有没有办法支持这个角色。
  4. 注意: 1.我正在使用c ++来触发此命令。并没有保存这个     值。            2.数据库符合UTF8,因为当我删除此'θ'时,插入查询会成功触发。

1 个答案:

答案 0 :(得分:1)

是的,PostgreSQL支持θ,字符 U+03b8希腊小写字母Theta ,无论是unicode转义还是字面形式:

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

猜测,您的数据库编码或客户端编码不支持它,或者更可能是因为您提到“乱码”,您的client_encoding与您实际数据的编码不匹配发送。

使用psql中的\lSHOW server_encoding;检查数据库编码。使用问题从客户端连接获取SHOW client_encoding; 的客户端编码。

我说你可能会向服务器发送UTF-8或UTF-16数据,但告诉服务器它是iso-8859-1或windows-1252,反之亦然。虽然θ不在那些编码中;你必须使用别的东西,或者在进入PostgreSQL之前发送已经被另一个无效转换破坏的数据。

如果你表现出来会很有帮助:

  • 产生的确切“乱码”和匹配的输入
  • 发送给PostgreSQL的C字符串的原始字节,以十六进制转义