2017-01-23 92 views
0

在帶Firedac的DELPHI XE3中,我們創建表table0並插入UTF8編碼的文本都可以。當讀取FTS表時不支持FIREDAC-UTF8編碼

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

但是,當我們創建一個FTS表並以UTF8插入文本時。

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

和閱讀

SELECT mytext FROM table1 

的數據,我們得到 「??????」。

SQLITE Expert Personal中的相同命令返回「привет」。這意味着在Insert命令後面的表中,我們有'привет',並且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; 

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

的情況下ABaseTypeName = 'VARCHAR'

SELECT mytext FROM table0 

在運行時返回正確的值。但在設計時我們仍然有'??????'。

但我認爲這不是一個好的解決方案。

相關問題