【问题标题】:activerecord/mysql saves my latin1 data as utf8activerecord/mysql 将我的 latin1 数据保存为 utf8
【发布时间】:2012-08-13 18:01:11
【问题描述】:

在我的数据库配置中,我有:

  adapter: mysql
  database: xxx
  username: xxx
  password: xxx
  host: localhost
  encoding: 'latin1'

我的表定义有:DEFAULT CHARSET=latin1

我把它放在文件的顶部:

# encoding: iso-8859-1

然而,当我保存我的记录并再次加载它时,latin1 数据已神秘地转换为 utf8。有人可以建议我缺少的东西吗?

【问题讨论】:

    标签: mysql ruby activerecord encoding


    【解决方案1】:

    列的编码呢?您必须将连接、表、列和程序编码/字符集设置为相同的,才能使您的代码正常工作。

    【讨论】:

    • 我尝试将列定义更改为:varchar(255) CHARACTER SET latin1 但我仍然遇到同样的问题,它在某处转换为 utf8。
    • 检查您的程序运行时配置的字符编码。例如,在 PHP 中,您可以将内部编码设置为 PHP 中的任何有效字符集,也许在 ruby​​ 中您可以做类似的事情。
    • 这就是编码行的用途。感谢您抽出宝贵时间发表评论,但如果您对这些内容不熟悉,那么您的 cmets 提供帮助的机会不大。
    • # encoding 仅代表解析文件而不是运行时编码,顺便说一句,latin1 不是 iso-8859-1 而是 cp1252。如果将数据库配置 yaml 中的编码设置为 BINARY,会发生什么?也许最糟糕的解决方案是将您的数据库更改为 utf-8。
    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多