sqlite没有保存像à作为$agrave

sqlite not saving french accents like à as $agrave

本文关键字:作为 agrave #224 保存 sqlite      更新时间:2023-10-27

当我将保存到我的数据库"C';est toutàfait juste"时,sqlite将删除&来自&agrave,因为它可能无法处理utf-8。

var sql+="INSERT INTO Test(TestId,Text)Values(1,"C';est toutàfait juste。");

我试着用à代替$agrave,但我认为会有更好的解决方案。

有更好的方法来解决这个问题吗?

谢谢你的帮助。。。

更新

这是我创建sqlite数据库的代码:

  function initDb($cordovaSQLite, logService) {
    var defcorrect = $.Deferred();
    try {
        logger = logService;
        db = window.sqlitePlugin.openDatabase({ name: "xxx.db", location: 0 }, successCB, errorCB);
        $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS Card(CardId UNIQUEIDENTIFIER PRIMARY KEY, CardSetId UNIQUEIDENTIFIER NOT NULL,  FrontText NVARCHAR(4000) NOT NULL, BackText NVARCHAR(4000) NULL, ControlType INT NOT NULL, CardLevel INT NOT NULL, IsDirty bit NOT NULL, ChangedAt INT NOT NULL, Active bit default 'true')").catch(function (err) {
            logService.writeAppError("00000000-0000-0000-0000-000000000000", "Could not init Table Card: ErrorNo: " + startGUIDLog + " ErrorMessage: " + err.message);
            window.location = "#/error/" + startGUIDLog;
        });
        $cordovaSQLite.execute(db, "CREATE UNIQUE INDEX IF NOT EXISTS Card_Index on Card (CardId)").catch(function (err) {
            logService.writeAppError("00000000-0000-0000-0000-000000000000", "Could not init INDEX Card_Index on Card: ErrorNo: " + startGUIDLog + " ErrorMessage: " + err.message);
            window.location = "#/error/" + startGUIDLog;
        });
        defcorrect.resolve(db);
    } catch (err) {
        logService.writeAppError("00000000-0000-0000-0000-000000000000", "Could not init Database: ErrorNo: " + startGUIDLog + " ErrorMessage: " + err.message);
        window.location = "#/error/" + startGUIDLog;
    }
    return defcorrect.promise();
}

用这个代码我插入数据

     function saveCard(cardList, userId, db) {
        var defcorrect = $.Deferred();
        truncateTable("Card", db, userId).done(function () {
            if (cardList.length !== 0) {
                var sql = "";
                cardList.forEach(function (card) {
                    sql += "INSERT INTO Card(CardId,CardSetId,FrontText,BackText,ControlType,CardLevel,IsDirty,ChangedAt,Active) VALUES (" + JSON.stringify(card.CardId) + "," + JSON.stringify(card.CardSetId) + "," + JSON.stringify(Card.FrontText) + "," + JSON.stringify(Card.BackText) + "," + card.ControlType + ", " + card.CardLevel + ",'" + card.IsDirty + "'," + card.ChangedAt + ",'" + card.Active + "');";
                });
                var successFn = function (count) {
                    logService.writeAppInfo(userId, "Sync Save Card Successfully imported " + count + " SQL statements to DB");
                    defcorrect.resolve();
                };
                var errorFn = function (error) {
                    logService.writeAppError(userId, "Sync Save Card Error: " + error);
                    $('#statusOverview').hide();
                    $('#syncError').show();
                };
                var progressFn = function (current, total) {
                    $("#statusText").text("Importiere " + current + "/" + total + " Karten");
                };
                cordova.plugins.sqlitePorter.importSqlToDb(db, sql, {
                    successFn: successFn,
                    errorFn: errorFn,
                    progressFn: progressFn,
                    batchInsertSize: 500
                });
            } else {
                defcorrect.resolve();
            }
        });
        return defcorrect.promise();
    }

在调试模式中,我可以看到,数据以正确的方式出现,如"C';est toutgave;fait juste"。插入后,当我读出这些数据时,它是这样的:"C'!est toutgageve;fait juste。"

对我来说,这个解决方案奏效了:

var elemfolderName = document.createElement('textarea');
elemfolderName.innerHTML = "C'est tout à fait juste.";
var  folderName = elemfolderName.value;

然后我将folderName保存到sqlite3db。。。