2017-01-23 2 views
0

Firedac이있는 DELPHI XE3에서 테이블 table0을 만들고 UTF8 인코딩으로 텍스트를 삽입하면 모두 정상입니다.FIR 테이블을 읽을 때 FIREDAC-UTF8 인코딩이 지원되지 않음

CREATE TABLE table0 (mytext Ntext,publishdate date); 
INSERT INTO table0 (mytext,publishdate) VALUES ('привет','1998-12-07'); 

그러나 FTS 테이블을 만들고 UTF8로 텍스트를 삽입 할 때.

SELECT mytext FROM table1 

CREATE VIRTUAL TABLE table1 USING FTS4(mytext,publishdate); 
INSERT INTO table1 (mytext,publishdate) VALUES ('привет','1998-12-07'); 

읽기 데이터는 우리가 얻을 "??????".

SQLITE 전문가 개인의 동일한 명령은 "привет"를 반환합니다. 삽입 명령 다음에 테이블에 'привет'이 있고 select가 UTF8 인코딩이 아닌 데이터를 반환한다는 것을 의미합니다. Firedac

ADQuery.Open('SELECT mytext FROM table1')? 
+0

여기서 'AsWideString' 또는'AsWideMemo'가 물음표를 반환합니까? 또는 가치를 얻기 위해 무엇을 사용합니까? 또한 삽입을 위해서는 유사한 액세스 권한이있는 매개 변수를 사용해야합니다. – Victoria

답변

0

내가 생각으로 테이블 올바른 값에서 얻을 수행 할 수 있습니다 무엇

는 FireDac 버그입니다. 내가 uADPhysSQLite.pas 단위의 ADSQLiteTypeName2ADDataType 프로 시저에 다음 라인을 변경했습니다

SetLen(AOptions.FormatOptions.MaxStringSize, False); 
AType := dtAnsiString; 

경우 ABaseTypeName = 'VARCHAR'

에 대한

SetLen(AOptions.FormatOptions.MaxStringSize, True); 
AType := dtWideString; 

SELECT mytext FROM table0 

은 런타임에 올바른 값을 반환합니다. 그러나 디자인 타임에는 여전히 '??????'이 있습니다.

하지만 좋은 해결책이라고 생각하지 않습니다.