Чтение текстового значения поля SQL Server в Delphi XE с одновременным преобразованием символов - PullRequest
2 голосов
/ 18 марта 2011

У меня есть база данных SQL Server 2005 с COLLATION SQL_Latin_General_CP1_CI_AS, и я хочу выполнить запрос из Delphi XE через ADO. Данные в SQL Server - это греческие и латинские символы. Но в Delphi я получаю нечитаемые строки символов. Как я могу решить эту проблему с Delphi XE?

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Поскольку вы говорите, что в БД есть как греческие, так и латинские символы, я полагаю, что вы уже используете nvarchar в БД.

В Delphi вы должны использовать TWideStringField для nvarchar полей. TStringField предназначен для varchar (ansistring).

Поле1 содержит «γειά σου»

StringField := ADODataSet1.FieldByName('Field1') as TStringField;
ShowMessage(StringField.Value);

ShowMessage показывает "? E ?? s ??"

Это прекрасно работает

WideStringField := ADODataSet1.FieldByName('Field1') as TWideStringField;
ShowMessage(WideStringField.Value);

Редактировать 1 Если у вас есть поля varchar в db, вы должны использовать TStringField, и вам нужно убедиться, что «Язык для программ, не поддерживающих Юникод» - Greek(Greece).

«Панель управления - Регион и язык - Административный - Изменить язык системы ...»

0 голосов
/ 18 марта 2011

Я обнаружил, что иногда UTF-8 хранится в базах данных в полях VarChar, обычно из программ на Java.

Если вы видите такие вещи, как â€", есть хороший шанс, что это происходит.

Вы можете попробовать

// Delphi 2009+
UTF8ToUnicodeString(RawByteString( db_value ))

// Delphi 2007 and older
UTF8Decode( db_value )

Если это так, вы также можете использовать функцию sql для преобразования полей VarChar в NVarChar

...