如何将速度数组[x,y,z]转换为要存储在数据库中的字符串?
我试图存储声明为这样的速度矢量:如何将速度数组[x,y,z]转换为要存储在数据库中的字符串?
me.vel = [0, 0, 0];
到MySQL数据库。我认为这需要在可以存储之前转换为一个字符串,但那是因为我不知道任何适当的类型来存储它,例如:VARCHAR,INT,STRING等(如果它可以存储,让我知道哪种类型的,因为这将是一个简单的解决方案,我就不必转换为字符串,然后回到矢量)
我已经试过:
var velocityString = me.vel.join();
var velocityString = String(me.vel);
但这些似乎并没有上班。
如何将此数组转换为字符串?
感谢, Digimas
或者你可以json编码的对象。
我会做var velString = me.vel.join(',');
如果你希望它是一个字符串。
将其转换回:
var vel = velString.split(',');
for (var i = 0; i < vel.length; i++) {
vel[i] = parseFloat(vel[i]);
}
或者,如果你知道你的用户只能使用现代浏览器:
var vel = velString.split(',').map(parseFloat)
我不能在MySQL更合适的数据类型评论。似乎三个数字列可能会更有意义,除非您希望将来能够记录更高维数的速度。
你知道,在不留下评论的情况下正确回答是一个非常反社会的事情。 – lawnsea 2011-05-27 15:09:00
为什么不将数据存储为三个单独的列? vel_x, vel_y, vel_z
(也许是DOUBLE
)。这样更清洁,并且可以节省您随时转换字符串的麻烦。
您尝试的两种解决方案都应该可以工作。两个都得到“0,0,0”。但正如克里斯托弗先前所建议的那样,JSON编码会起作用,并且在我看来是最好的解决方案。加入或字符串化只是创建一个逗号分隔列表,这与一个例子,因为这将是好的。但是如果你做了更复杂的事情,你就会失去数据的意义(比如说你的数组不是数字)。所以如果JSON.stringify/parse可用,那么使用它,否则[0,0,0] .join(“ ,“)/”0,0,0“.split(”,“)将起作用。
var vel = [0, 0, 0];
var vel_string = vel.join('|');
给你0|0|0
然后使其成为一个数组,如果你有串失控的数据库:
var vel_string = '0|0|0';
var vel = vel_string.split('|');
for(var i in vel) {
vel[i] = parseInt(vel[i]);
}
如果(我不认为它的情况下)的速度元素值是固定的,您可以使用MySQL SET或ENUM datatypes之一来存储您的阵列。
否则,我会去JSON和存储JSON。在一个VARCHAR
字段编码的字符串(除非你存储光速度):
/* Store: */ JSON.encode([1,2,3]); //=> "[1,2,3]"
/* Retrieve: */ JSON.parse(velocityFromSQL); //=> [1,2,3]
VARCHAR
可含有多达255个字符
'string.concat(STR1, str2,...,strN)'可能会诀窍 - 但您将无法解开它。 – 2011-05-27 14:57:01
为什么大家都同意将数字存储为字符串? – 2011-05-27 15:03:00
因为这是被问及的问题,我不是MySQL数据类型的专家。 – lawnsea 2011-05-27 15:07:09