【问题标题】:How do I convert a velocity array [x, y, z] into a string to be stored in a database?如何将速度数组 [x, y, z] 转换为要存储在数据库中的字符串?
【发布时间】:2011-09-03 11:38:30
【问题描述】:

我正在尝试存储一个声明为这样的速度向量:

 me.vel = [0, 0, 0];

导入 MySQL 数据库。我认为这需要在存储之前转换为字符串,但那是因为我不知道任何合适的类型来存储它,例如:VARCHAR、INT、STRING 等。(如果可以存储让我知道哪种类型,因为这将是一个更简单的解决方案,我不必转换为字符串然后再转换回向量)

我试过了:

 var velocityString = me.vel.join();
 var velocityString = String(me.vel);

但那些似乎不起作用。

如何将这个数组转换成字符串?

谢谢, 数码相机

【问题讨论】:

  • string.concat(str1, str2, ..., strN) 可以解决问题 - 但您将无法打开它。
  • 为什么大家都同意将数字存储为字符串?
  • 因为这是被问到的问题,而且我不是 MySQL 数据类型方面的专家。

标签: javascript mysql arrays string


【解决方案1】:

如果你希望它是一个字符串,我会使用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 中更合适的数据类型。除非您希望在未来记录更高维度的速度,否则三个数字列似乎更有意义。

【讨论】:

  • 你知道,在不发表评论的情况下对正确答案投反对票是一件非常反社会的事情。
【解决方案2】:

为什么不将数据存储为三个单独的列? vel_x, vel_y, vel_z(可能是DOUBLE)。这样更简洁,可以省去一直转换为字符串的麻烦。

【讨论】:

    【解决方案3】:

    或者您可以对对象进行 json 编码。

    【讨论】:

      【解决方案4】:

      您尝试的两种解决方案都应该有效。我得到“0,0,0”。但正如 Christopher 之前建议的那样,JSON 编码会起作用,并且在我看来是最好的解决方案。加入或字符串化只需创建一个逗号分隔列表,只需一个示例即可。但是,如果您做任何更复杂的事情,您就会失去数据的意义(例如,如果您的数组不仅仅是数字。)因此,如果 JSON.stringify/parse 可用,则使用它,否则 [0,0,0].join(" ,")/"0,0,0".split(",") 会起作用。

      【讨论】:

        【解决方案5】:
        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]);
        }
        

        【讨论】:

          【解决方案6】:

          如果(我不认为是这种情况)速度元素值是固定的,您可以使用MySQL SETENUM datatypes 之一来存储您的数组。

          否则我会选择 JSON 并将 JSON.encoded 字符串存储在 VARCHAR 字段中(除非您存储光速)1

          /* Store:    */ JSON.encode([1,2,3]);            //=> "[1,2,3]"
          /* Retrieve: */ JSON.parse(velocityFromSQL); //=> [1,2,3]
          

          1VARCHAR 最多可包含 255 个字符

          【讨论】:

            猜你喜欢
            • 2022-06-19
            • 1970-01-01
            • 1970-01-01
            • 2022-11-15
            • 1970-01-01
            • 2022-11-13
            • 1970-01-01
            • 2021-10-22
            • 2015-10-30
            相关资源
            最近更新 更多