我在Delphi中遇到unicode(寬)字符串字段的問題XE2沒有返回字符串的最後部分,任何數據庫控制組件也沒有完全顯示完整字符串到最後。直接甲骨文訪問切斷了Unicode(寬)字符串的結尾
你可以看到下面的簡單測試。
with TOracleDataSet.Create(self) do
try
Session := OraSession;
SQL.Text := 'CREATE TABLE test1 (fsString10 VARCHAR2(10))';
ExecSQL;
SQL.Text := 'INSERT INTO test1 (fsString10) VALUES ('''1234567890''')';
ExecSQL;
SQL.Text := 'INSERT INTO test1 (fsString10) VALUES ('''й234567890''')';
ExecSQL;
SQL.Text := 'INSERT INTO test1 (fsString10) VALUES ('''йцукенгшщз''')';
ExecSQL;
SQL.Text := 'SELECT fsString10 FROM test1';
Open;
while not Eof do
ShowMessage(FieldByName('fsString10').AsString);
// '1234567890' turned into '1234567890'
// 'й234567890' turned into 'й23456789'
// 'йцукенгшщз' turned into 'йцуке'
SQL.Text := 'DROP TABLE test1';
ExecSQL;
finally
Free;
end;
正如你可以看到unicode字符串沒有正確加載。
另一方面,「直接Oracle Access 4.1.3」組件在郵件記錄後沒有在字符串中保存字符。無論如何,它只節省了第一個半字符串。
有沒有辦法解決它?
- BytesPerCharacter設置爲bcAutoDetect。
- 我試過切換NoUnicodeSupport和所有其他選項沒有運氣。
有沒有人有任何想法如何解決這個問題?
PS:出於多種原因,我無法更改生產數據庫模式。
DB Server NLS_DATABASE_PARAMETERS NLS_CHARACTERSET = CL8MSWIN1251
DB Client NLS_LANG=AMERICAN_AMERICA.UTF8
DB Client NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251 <- the same thing
在您的調試中,您是否確定這是插入還是選擇的問題? –
你的數據庫配置了哪個字符集?你是否用'NVARCHAR2'數據類型試過你的例子? – TLama
@Rob,問題實際上是字符串緩衝區大小。 –