我在 Delphi 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 字符串。
另一方面,“Direct 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