2013-10-30 99 views
0

我有一个使用DavArt dotConnector连接到PostgreSQL数据库的C#项目。 在数据库中,我可以添加角色以在连接字符串中使用它。在连接字符串中使用非拉丁字符PostgreSQL的用户ID

CREATE ROLE "Z111222333";
ALTER ROLE "Z111222333" WITH NOCREATEROLE LOGIN PASSWORD 'md5c6fd41ba62fc5ce98135f0707de385ba';

拉丁字符的名字都是正确的。用户可以连接。
我尝试使用非拉丁字符(例如西里尔字母)创建角色。

CREATE ROLE "ZФРОЛОВМ";
ALTER ROLE "ZФРОЛОВМ" WITH NOCREATEROLE LOGIN PASSWORD 'md5b4b194033aab1f2d6dbd275736f1b029';

在这种情况下,用户无法连接。例外:“错误:28P01:用户”ZФРОЛОВМ“的密码验证失败。”

连接器:Devart dotConnector for PostgreSQL 6.5
数据库:PostgreSQL 9.1
连接字符串:"User Id=ZФРОЛОВМ;Password=A1E0476879CAB2A76CC22C80BBF364; Host=localhost;Database=testDB;Unicode=True;Persist Security Info=True;Schema=mir"

如何使用非拉丁字符的用户ID?

+1

确定密码正确吗? – JMK

+0

对不起。我确信在我的数据库中密码是正确的。但在这个例子中,我犯了一个错误:'ALTER ROLE“ZФРОЛОВМ”WITH NOCREATEROLE LOGIN PASSWORD'md517aa59c10d0061a2d179831df43902f6';' – Roren

回答

0

在PostgreSQL中最好避免在用户名(和数据库名)中使用非ASCII字符。在初始连接设置和身份验证期间,字符编码转换处于非活动状态,并且连接的成功与否取决于您是否恰好以正确的编码发送正确的字节。我不知道你的情况是否是这个问题,但它不会让我感到意外,如果还有其他类似问题,我不会感到惊讶。

+0

谢谢。我将用它作为最佳做法。 – Roren