2

非ASCII文字を含むいくつかの文字列をデータベース(Postgress)に挿入する必要があります。これが最小限の例です。で「引数を強制できませんでした」というメッセージが表示され<cdecl: long 'odbx_query' (ulong char* ulong) module: 'opendbx'>ます。私が理解していることから、これはFFIエラーであり、呼び出しはデータベースバックエンドに到達しませんでしたが、よくわかりません。

| conn settings sql |
settings :=     DBXConnectionSettings
                host: 'host.com'
                port: '5432'
                database: 'grss'
                userName: 'username'
                userPassword: 'password'.
conn := DBXConnection platform: DBXPostgresPlatform new settings: settings.
conn connectAndOpen.
sql := 'select ''', (WideString fromPacked: 269), ''' from dual'.
conn execute: sql.
conn close.
conn disconnect.
4

5 に答える 5

4

私も同じ問題を抱えていたと思います。サーバーと同じエンコーディングを使用してデータをエンコードする必要があります。現在、次の方法でエンコーディングを指定できるはずです。

settings :=     DBXConnectionSettings
                host: 'host.com'
                port: '5432'
                database: 'grss'
                userName: 'username'
                userPassword: 'password';
                encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8).

エンコーディングが不明な場合は、DBXAutomaticEncodingの代わりに使用できますDBXStaticEncoding。これはpostgresqlデータベースで機能するはずです。

于 2011-03-07T06:35:17.083 に答える
1

私はまだstackoverflowで誰かに答える方法を知りません。とにかく、パヌが言うことはうまくいくはずです:

settings :=     DBXConnectionSettings
                host: 'host.com'
                port: '5432'
                database: 'grss'
                userName: 'username'
                userPassword: 'password';
                encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8).

UTF8TextConverterを直接使用する必要はありません。これがSqueakDBXでそれを行う方法です。そしてそれはGlorpDBXとは何の関係もありません、それはただのSqueakDBXです。最新のConfigurationOfSqueakDBXが更新されていない場合は、Monticelloブラウザを使用して最新バージョンに更新してください。

于 2011-03-11T08:48:03.757 に答える
1

問題はWideStringのようです。FFIはWideStringインスタンスからCchar*に変換できないようです

ワイドの代わりに通常のByteStringを使用できますか?多分FFIはそれができるように修正することができますか?

于 2011-03-06T20:54:08.407 に答える
0

FFIのchar*にはByteStringが必要です。たぶんpostgresはUTF-8を直接使用できますか?もしそうなら、あなたはただsqueakToUtf8と言わなければならないでしょう。

于 2011-03-07T17:19:26.820 に答える
0

を使用して修正

UTF8TextConverter >> convertToSystemString

UTF8TextConverter >> convertFromSystemString

于 2011-03-07T17:57:28.193 に答える