在MySQL数据库中存储0和1的系列

我正在使用MySql和Nodejs。 我需要存储一个只有0和1的巨大的string。 (这是一个地图网格,0 =可以移动,1 =不能移动。)

例如:0000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 …

我应该把这个string,编码成一个base64string,并以这种方式存储? 那么当我需要的时候,我解码它? 如果是这样,我将如何使用Nodejs / Javascript?

谢谢

您存储的数据似乎很容易压缩,为什么不使用内置的MySql COMPRESSfunction

生的:

mysql> select length('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000'); 332 

用压缩

 mysql> select length(compress('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000')); 23 

不要存储string,存储二进制文件。

下面是一个可以将数据转换为二进制数据的例子。 希望你可以重新devise一些东西,这样你的地图数据从来就不是一个string。

  static void Main(string[] args) { const string data = "00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000"; var arrayLength = data.Length/8; if (data.Length%8 != 0) arrayLength++; var binaryData = new byte[arrayLength]; byte nextByte=0; var k = -1; for (var i = 0; i < data.Length; i++) { var j = i%8; if (j == 0) { binaryData[++k] = nextByte; nextByte = 0; } var bit = int.Parse(data[i].ToString()); if(bit==1) nextByte |= (byte)(bit << j); } binaryData[k] = nextByte; }