MYSQL保存经纬度数据类型
我们在做定位或者一些基于位置的系统的时候,肯定有需要用到存储位置的经纬度,来精确判断位置坐标等。
赤道周长(米) | 度数 (度) |
---|---|
400076000 | 360 |
111322.2222 | 1 |
11132.22222 | 0.1 |
1113.222222– | 0.01 |
111.3222222 | 0.001 |
11.13222222 | 0.0001 |
1.113222222 | 0.00001 |
0.11132222 | 0.000001 |
0.01113222 | 0.00000001 |
所以,只需要精确到小数点后 7 位,精度就是 1CM,因此,数据库保存经纬度采用 decimal(10, 7) 即可。
附:decimal简介
【1】对SQL Server而言,Decimal可用来保存具有小数点而且数值确定的数值,它不像float和real是用来保存近似值。对于Visual Basic而言,Decimal是其版本5新增的数据类型,目的是满足进行精密数学运算的需求,它是范围最大、最精确的浮点数类型。对于Excel而言,DECIMAL()函数用于按给定基数将数字的文本表示形式转换成十进制数。
【2】中文名
Decimal型变量或DECIMAL()函数
外文名
Decimal
最大可能值1
+/-79228162514264337593543950335
最大可能值2
+/-7.9228162514264337593543950335
最小非零值
+/-0.0000000000000000000000000001
用于Visual Basic用于Excel
用于SQL Server
【3】命名规则
Decimal的命名格式为:
在这里数字指一个或多个数(0,1,…,9)的组合,因而一百万能够被表示为1000000或+100000,数字百分之一(1/100)能够被表示为0.01。值得注意的是,逗号(,)是不允许在一个 Decimal名称中出现的。[5]
数据精度
对SQL Server而言,decimal和numeric视为相同的类型,它们可用来保存具有小数点而且数值确定的数值。它们不像float和real是用来保存近似值。此类型的列其声明方式为decima[(p[,s])]或numericl[(p[,s])]。其中p是此数值全部的位数,含小数部分但不包括小数点,s则是小数的位数。p值称为此数值的精确度,例如:decimal(10,3)表示共有7位整数3位小数,此例的精确度为10位。此类型的列可保存的值范围为1038-1到-1038-1之间。其占用存储空间依精确度不同而不同,下表给出Decimal类型变量精确度和占用空间的关系。
【4】精确度 占用空间
1~9 5
10~19 9
20~28 13
29~38 17
如果使用该类型的变量未指定精确度,则系统使用默认的18位精确度,如果未加以指定小数位数的话,系统的默认值为0位小数。SQL Server搭配的前端开发工具(如VB,Delphi),其所支持的精确度为28位,如果需要超过28位的精确度的话,可以以命令行的方式执行sqlservr.exe启动SQL Server,并使用/参数即可,在此种状况下,此类型最大的精确度为38。
用于Visual Basic
【5】数据精度
Decimal变量存储为96位(12个字节)无符号的整型形式带符号的整型形式,并除以一个10的幂数。这个变比因子决定了小数点右面的数字位数,其范围从0到28变比因子为0(没有小数位)的情形下,最大的可能值为+/-79,228,162,514,264,337,593,543,950,335。而在有28个小数位的情况下,最大值为+/-7.9228162514264337593543950335,而最小的非零值为+/-0.0000000000000000000000000001。
【6】注意事项
Decimal数据类型只能在Variant中使用,即不能声明一变量为DecimaI的类型。不过可用Cde函数,创建一个子类型为Decimal的Variant。
用于Excel
【7】语法结构为:
1)从语法结构可以看出,该函数只有两个必选参数,各参数的作用如下:
text:该参数用于指定要转化的数据,其长度必须小于或等于255个字符;
radix:该参数用于指定转换基数,其值必须大于或等于2(二进制或基数2)且小于或等于36(基数36)。
注意事项
text参数可以是对于基数有效的字母数字字符的任意组合,并且不区分大小写;
如果任何一个参数超出其限制,十进制可能返回#NUM!或者#VALUE!错误值。