如何将速度数组[x,y,z]转换为字符串以存储在数据库中?

| 我正在尝试存储声明为这样的速度矢量:
 me.vel = [0, 0, 0];
进入MySQL数据库。我认为必须先将其转换为字符串才能存储,但这是因为我不知道将其存储为例如VARCHAR,INT,STRING等的任何适当类型(如果它是可以存储,让我知道哪种类型,因为这将是一个更简单的解决方案,并且我不必转换为字符串然后再转换为向量) 我试过了:
 var velocityString = me.vel.join();
 var velocityString = String(me.vel);
但那些似乎不起作用。 如何将该数组转换为字符串? 谢谢, Digimas     
已邀请:
        或者,您可以对对象进行json编码。     
        为什么不将数据存储为三个单独的列?
vel_x, vel_y, vel_z
(也许是
DOUBLE
)。这更加干净,并且可以避免您一直在转换成字符串的麻烦。     
        如果(并且我认为不是这样)速度元素的值是固定的,则可以使用MySQL SET或ENUM数据类型之一来存储数组。 否则,我将使用JSON并将JSON.encoded字符串存储在
VARCHAR
字段中(除非您存储的是光速)1:
/* Store:    */ JSON.encode([1,2,3]);            //=> \"[1,2,3]\"
/* Retrieve: */ JSON.parse(velocityFromSQL); //=> [1,2,3]
1
VARCHAR
最多可包含255个字符     
        您尝试过的两个解决方案都应该起作用。我都得到\“ 0,0,0 \”。但正如Christopher之前所建议的那样,JSON编码将起作用,并且我认为这是最好的解决方案。加入或字符串化只需创建一个逗号分隔的列表,只需一个示例,就可以了。但是,如果您执行更复杂的操作,则会使数据失去意义(例如,如果数组不是唯一的数字。)因此,如果JSON.stringify / parse可用,则使用它,否则[0,0,0] .join( \“,\”)/ \“ 0,0,0 \”。split(\“,\”)将起作用。     
        如果您希望它是字符串,我会做
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中更合适的数据类型。除非您期望将来记录更高维的速度,否则似乎三个数字列可能更有意义。     
        
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]);
}
    

要回复问题请先登录注册