【问题标题】:Rails mysql2 migration breaks utf8 stringsRails mysql2 迁移破坏了 utf8 字符串
【发布时间】:2012-11-18 16:21:37
【问题描述】:

我正在将旧的 mysql 数据库迁移到新的数据库,因此我编写了一个连接到旧数据库的脚本,读取它并在新数据库中创建新实体。这里是:

old_db = Mysql2::Client.new(host: options[:db_host],
                            username: options[:db_user],
                            password: options[:db_password],
                            database: options[:db_name],
                            encoding: 'utf8')
old_categories = old_db.query('select id, title from catalog__category order by lvl asc')
old_categories.each do |old_c|
  c = Catalog::Category.new
  c.name = old_c["title"]
  c.save!
end

但是,在迁移之后,类别名称变得非常糟糕。 两个数据库都以 utf8 编码。客户端和服务器设置utf8编码

mysql> show variables like "%character%";
+--------------------------+------------------------------------------------------+
| Variable_name            | Value                                                |
+--------------------------+------------------------------------------------------+
| character_set_client     | utf8                                                 |
| character_set_connection | utf8                                                 |
| character_set_database   | utf8                                                 |
| character_set_filesystem | binary                                               |
| character_set_results    | utf8                                                 |
| character_set_server     | utf8                                                 |
| character_set_system     | utf8                                                 |
| character_sets_dir       | /usr/local/Cellar/mysql/5.5.27/share/mysql/charsets/ |

PHP 项目使用旧数据库并正确显示所有字符串, Rails 项目使用新数据库并正确显示所有内容,但导入了类别字符串。

有谁知道问题出在哪里以及如何解决?

谢谢。

【问题讨论】:

  • 看来 PHP 项目(Doctrine 2)以某种奇怪的格式存储字符串。问题仍然存在,因为我不知道如何将其转换为普通的 utf8 字符串

标签: ruby-on-rails utf-8 mysql2


【解决方案1】:

数据库本身编码错误的根本问题(前段时间从 latin1 更改为 utf8)。结果字符串在转储中被编码了两次。

mysqldump --default-character-set=latin1 --skip-set-charset -u <user> -p > b.sql

此命令有助于生成正确的转储

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多