首页 > 解决方案 > 在 Rails 中,使用 mysql2 gem 从 MySQL 读取点类型时出现问题

问题描述

我正在从遗留系统进行重构,但我遇到了“点”数据类型的问题。

在 Sequel Pro 中,我可以看到列“位置”的值为POINT(-22.81507676827597 -47.07767857976228)

但是当我从数据库中查询它时

Mysql2::Client.new(
          host: ENV.fetch('LEGACY_DATABASE_HOST'),
          username: ENV.fetch('LEGACY_DATABASE_USERNAME'),
          password: ENV.fetch('LEGACY_DATABASE_PASSWORD'),
          database: ENV.fetch('LEGACY_DATABASE_NAME')
        ).query("SELECT * FROM local").first('location')

我得到一个奇怪的结果,例如 "\x00\x00\x00\x00\x01\x01\x00\x00\x00\x84y\xFF\xDE\xA8\xD06\xC0\xE0\xD6'_\xF1\x89G\xC0" ,如果我尝试立即保存它,它将变为 0。

如何用rails处理mysql中的点数据类型的正确方法?

标签: mysqlruby-on-rails

解决方案


我强烈建议您使用activerecord-postgis-adapter gem,让这一切变得非常简单。尽管如果您打算自己做,请深入研究那个宝石,看看他们是如何做的point


推荐阅读