我需要使用WebSQL存儲包含二進制數據的JavaScript字符串。我知道可以使用用戶技術(IndexedDB,LocalStorage,...),但由於某些原因,我需要堅持使用WebSQL。由於配額有限且數據可能變大,我不希望對數據進行Base64編碼。在WebSQL中存儲包含二進制數據的JS字符串
考慮以下JS代碼(和相應的JSFiddle):
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
function test(str){
db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS test');
tx.executeSql('CREATE TABLE test (val)');
tx.executeSql('INSERT INTO test(val) VALUES (?)',[str]);
tx.executeSql('SELECT val FROM test',[],function(tx,result){
var str2 = result.rows.item(0).val;
console.log(str + " (" + str.length + ") - " + str2 + " (" + str2.length + ")");
});
});
}
test("Foo");
test("A\0B");
其輸出
美孚(3) - 富(3)
AB(3) - 甲(1)
在Chrome和Safari中。
正如你所看到的零字節和被WebSQL吃掉之後的所有charachters。你知道是否有任何方法可以將這個字符串放入WebSQL中而不用擴大它(例如通過Base64編碼),並且不使用其他存儲技術?
看到我自己的答案,我得到了它,而無需重新編碼它的工作 – muffel