为什么使用Unicode字符θ;PGSQL中不支持 我用PostgreSQL与C++进行交互,尝试插入Unicode字符γδεZeta Ethth.P/
在某个数据库表中激发了insert查询,发现“θ”不受字符支持 为此,我运行gdb。对于这个字符,即“θ”,它显示的是直布罗陀字符为什么使用Unicode字符θ;PGSQL中不支持 我用PostgreSQL与C++进行交互,尝试插入Unicode字符γδεZeta Ethth.P/,c++,postgresql,character-encoding,C++,Postgresql,Character Encoding,在某个数据库表中激发了insert查询,发现“θ”不受字符支持 为此,我运行gdb。对于这个字符,即“θ”,它显示的是直布罗陀字符 我可以找到Postgresql支持的字符集吗 Pgsql是否支持此字符 有没有办法支持这个角色 注意:1。我正在使用C++来触发这个命令。但这并不能挽救这一切 价值 2.数据库符合UTF8,因为当我删除此“θ”插入查询时,已成功触发。是的,PostgreSQL支持θ,字符U+03b8希腊小写字母θ,采用unicode转义和文字形式: regress=> SEL
2.数据库符合UTF8,因为当我删除此“θ”插入查询时,已成功触发。是的,PostgreSQL支持
θ
,字符U+03b8
希腊小写字母θ,采用unicode转义和文字形式:
regress=> SELECT 'θ', E'\u03b8';
?column? | ?column?
----------+----------
θ | θ
(1 row)
猜测一下,您的数据库编码或客户端编码不支持它,或者更可能是由于您提到了“胡言乱语”,您的client\u编码与实际发送的数据编码不匹配
用psql中的\l
检查数据库编码,或显示服务器编码代码>。使用SHOW client\u编码获取客户端编码代码>来自与问题相关的客户端连接
我想说,您可能正在向服务器发送UTF-8或UTF-16数据,但告诉服务器它是iso-8859-1或windows-1252,反之亦然。虽然θ
不在这些编码中;在使用PostgreSQL之前,您必须使用其他东西,或者发送已经被另一个无效转换破坏的数据
如果您能展示以下内容,将非常有帮助:
- 确切的“胡言乱语”产生和匹配的输入
- 以十六进制转义形式发送到PostgreSQL的C字符串的原始字节
目前尚不清楚gdb与此有何关系。“为此,我运行gdb”。嗯?实际上,我在调试代码,我把C++的查询烧到数据库中,用GDB打印每一行的输出,即添加断点,当输出结果打印成字符时,你就把另一个变量添加到你的混合中:你正在运行GDB的终端字符编码。在该终端中,locale
命令的输出是什么?其余的呢-\l
或显示服务器编码代码>和显示客户端编码代码>?请将这些添加为对原始问题的编辑,然后在完成后在此处进行评论。我已检查数据库编码是否为UTF-8。还想更新您是对的,支持“θ”,因为它是随机行为。客户端编码也可以。因为它支持UTF8字符,而不是“θ”,但有时。我发现,代码中可能存在一些问题。我相信这是代码中的字符集处理问题,或者更微妙的事情,比如内存问题。如果是字符编码问题,那么就不应该支持字符,因为对于字符串“αβγδεζηθ”,只支持“θ”,不支持“θ”。也就是说,如果我输入“αβγδεζη”,那么值就成功提交(请参见我省略了θ)@vermaraj实际上,事实并非如此。请在您的计算机上显示您的client\u编码
和locale
命令的输出。另外,您的PostgreSQL版本是什么(select version()
)。