|
|
1
3
实际上,进一步的测试揭示了以下奇怪的结果:当DB驱动程序将数据绑定到查询语句时,精度会丢失,并且 之前 数据实际上被插入到DB中。 这有以下有趣的结果:即使我将关键字绑定到后续的搜索查询,精度似乎也会以相同的方式丢失,因此几乎“意外”地返回了正确的结果。也就是说,键(坐标)存储不正确,随后的选择也不正确地转换查询键,但以匹配的方式转换,因此找到了记录。考虑到由于精度损失而导致的转换总是在同一平台(服务器)上执行,保持原样可能是安全的??或者可能不是,也许未来的迁移操作(即,由于缩放)会使舍入误差变得明显。 Yawar的指针让我看到了MySQL的手册,其中解释了浮点数字可以存储为DECIMAL,而不会丢失精度: 精确值数字文本有整数部分或小数部分,或两者兼而有之。它们可能是有符号的 http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html
假设现有的解决方案似乎有效,那么问题就变成了,保留DB数据类型更好吗
存储:
这意味着我们需要:
相反,类型为的列
速度(算术):
速度(搜索):
结论:
|
|
2
0
与其将纬度和经度存储为双倍,不如乘以1000000,转换为整数并存储。当然,如果你需要在你的应用程序中读回来,可以除以100000.0。 这将为您提供足够的占位符精度(0.000001),并将消除浮点转换和精度问题,并且占用的空间略小。我在自己的数据中使用这个(它是二进制的,而不是SQL),并称之为MicroDegrees。 |
|
|
hello_programmers · Mysql从其他表输出一列 2 年前 |
|
|
Community wiki · 这个MySQL语句出了什么问题? 2 年前 |
|
|
Community wiki · 优化从同一表中提取的多列的查询 2 年前 |
|
|
Popo · Sql查询:返回数据库中不可用的where条件 2 年前 |
|
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 2 年前 |
|
|
Kugelfisch · 用php为数据库加密数据 2 年前 |