Hi, I found out that apparently in PGSQLKit there is an error in PQescapeStringConn or the way it is being used.
>From the docu I take it this is to prevent SQL injection attacks. I removed >any processing and it turned out the issue ceases, all works fine. The call is here: -(NSString *)sqlEncodeString:(NSString *)toEncode { return toEncode; //size_t result; int error; char *sqlEncodeCharArray = malloc(1 + ([toEncode length] * 2)); // per the libpq doc. const char *sqlCharArrayToEncode = [toEncode cStringUsingEncoding:defaultEncoding]; size_t length = strlen(sqlCharArrayToEncode); PQescapeStringConn ((PGconn *)pgconn, sqlEncodeCharArray, (const char *)[toEncode cStringUsingEncoding:defaultEncoding], length, &error); NSString *encodedString = [[[NSString alloc] initWithFormat:@"%s",sqlEncodeCharArray] autorelease]; free(sqlEncodeCharArray); return encodedString; } This indicates that the problem is in PGSQLKit and not in any settings for tables or the database itself. So I take it to the Cocoa list at Apple. Thanks and regards Alex Am 22.03.2012 um 09:06 schrieb Alexander Reichstadt: > Sorry, there is a copy-paste error, actually the code really is: >> const char *cString = [sql cStringUsingEncoding:defaultEncoding]; >> if (cString == NULL) { > blablabla > //This just catches cases where cString failed to encode. > } >> res = PQexec(pgconn, cString); > > > Am 22.03.2012 um 09:02 schrieb Alexander Reichstadt: > >> Hi, >> >> I need to be able to store special chars, German Umlaute, in my tables. This >> works when using pgPHPAdmin to store the same value to the same field. But >> when using the c-library it doesn't, fields stored are garbled. >> >> I checked using \l to see what encoding the database is which is UTF8, UTF8 >> is what's required. >> >> List of databases >> Name | Owner | Encoding | Collation | Ctype | Access privileges >> -----------+----------+----------+-----------+-------+----------------------- >> MyDB | postgres | UTF8 | C | C | >> alltypes | postgres | UTF8 | de_DE | C | >> postgres | postgres | UTF8 | C | C | >> template0 | postgres | UTF8 | C | C | =c/postgres + >> | | | | | postgres=CTc/postgres >> template1 | postgres | UTF8 | C | C | =c/postgres + >> | | | | | postgres=CTc/postgres >> >> >> As a way to store things I use PGSQLKit, which in turn uses >> >> const char *cString = [sql cStringUsingEncoding:defaultEncoding]; >> if (cString == NULL) >> res = PQexec(pgconn, cString); >> >> >> >> to store things. The defaultEncoding I also changed explicitly from >> defaultEncoding to UTF8 to try, but got the same result. As far as I can see >> this is not an error on part of the PGSQLKit. >> >> From what I read there is no table specific encoding. >> >> The collation is set to C, but that's something only relevant to sorting as >> far s I understand. >> >> So, I am at a loss as to where things go wrong. >> >> >> >> Any ideas? >> >> Thanks >