我有一个城市名称的数据集及其相应的纬度/经度我已加载到MySQL表中,如下所示:
city_id | city_name |北纬DECIMAL(9,6)|经度DECIMAL(9,6)
典型的纬度/经度坐标可能如下所示:54.284758 / 32.484736。
但是,我只得到比例为2的值才能在我的表中正确显示,换句话说,相当于DECIMAL(5,2)。数据从文本CSV上传,该文本CSV是从OpenOffice Calc导出的,用于UTF-8目的。我知道OpenOffice有一些小数问题,但完整的纬度/经度肯定在导出的CSV中。如果我用记事本打开CSV,数据就可以了。
任何人都可以看到我可能做错了吗?
感谢。
更新 得到它的工作,感谢所有的输入。我从头开始重新创建了所有内容,新的模式文件(我正在使用ORM),新的CSV导出,新表,新的LOAD DATA INFILE,并且它使用正确的十进制输出。打败我。
答案 0 :(得分:5)
根据您的需要,这可能有点过分,但在处理地理数据时,您可能需要考虑使用MySQL Spatial Extensions。
我将补充说,您当前使用的数据类型足以表示CSV文件中的数据。导入器中有任何东西在导入时将其砍掉,或者您用来查看数据的任何内容都会截断它。
答案 1 :(得分:1)
我建议使用字符串数据类型(如varchar)来存储Lat,Long。我正在开发一个广泛使用这些坐标的应用程序,我没有遇到任何问题,将其存储为字符串。将其存储为数字,您将遇到精确问题。
需要考虑的事情。
答案 2 :(得分:0)
为什么不直接在MySQL表中将字段声明为DOUBLE类型?小数点后的位数和位数的限定符是可选的。