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
>