`
RunUpwind
  • 浏览: 91966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails3 mysql2安装,incompatible character encodings: UTF-8 and ASCII-8BIT 解决!

阅读更多

问题环境:

os:  windows XP

 

F:\>ruby -v

ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

 

 

 

F:\>rails -v

Rails 3.0.5

 

 

问题描述:

1、安装不了mysql2

      rails3 默认使用mysql adapter是mysql2. 

   1) gem install mysql2

         ERROR:  Error installing mysql2:

         The 'mysql2' native gem requires installed build tools.

 

        Please update your PATH to include build tools or download the DevKit

        from 'http://rubyinstaller.org/downloads' and follow the instructions

        at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'

 

   2) 安装DevKit  按照http://wuhuizhong.iteye.com/blog/875493

 

   3)gem install mysql2

         Temporarily enhancing PATH to include DevKit...

        Building native extensions.  This could take a while...

        ERROR:  Error installing mysql2:

        ERROR: Failed to build gem native extension.

 

        F:/Ruby192/bin/ruby.exe extconf.rb

       checking for rb_thread_blocking_region()... yes

       checking for main() in -llibmysql... no

         *** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of

necessary libraries and/or headers.  Check the mkmf.log file for more

details.  You may need configuration options.

 

    4)这样问题就同 http://www.iteye.com/problems/49494

    5)那就暂且使用mysql  adapter吧

       gemfile 中改为: gem 'mysql', '2.8.1'

2.incompatible character encodings: UTF-8 and ASCII-8BIT

    当页面中写了中文之后,比如一个label, <%= f.label :title, '标题' %>

    按错误信息google ,baidu了 n多,都没有解决。包括:

    1) html.erb文件前加这一行:<%# encoding:utf-8 %> ,并保存成了utf-8格式(这一点是需要的)

    2) http://www.iteye.com/topic/355909 这个第一点试过了,第二点找不到类似的文件

 

    后来发现 new页面可以正常显示,edit页面报这个错,同是一个_form.html.erb

 

    按一篇文章中说法,测试了下:

   页面代码:

   <td><%= blog.title.encoding %></td>

 

    页面显示:ASCII-8BIT

    说明:因为rails从数据库取出的中文默认编码是ASCII-8BIT,如果页面是UTF-8编码,  concat就会出现这个错误。

 

  要解决这个问题,就需要“数据库取出的中文 转为utf-8”. 找不到可用的资料。

 

解决

    感谢QQ网友 寿司   告诉我windows下安装mysql2的命令:

    gem install mysql2 -v 0.2.6 --platform x86-mingw32

 

    成功安装了mysql2,  将gemfile中改为:gem 'mysql2', '0.2.6'  

    database.yml 中adapter 改回mysql2

 

    再次测试:页面代码:<td><%= blog.title.encoding %></td>

    result:  UTF-8.

 

    第2个问题也迎刃而解了。再次感谢 寿司。


 

补充:

   看来mysql2 adapter还是有bug, 一个表有5列:

  A: id   B:string  C:integer  D:string  E:string

  从数据库查出,B列utf-8, 显示正常, D,E  却是ASCII-8BIT。

 

   我重建了数据库表,调整了列的顺序,改为:

   A: id   B:string   D:string  E:string C:integer 

  从数据库查出,B,D列utf-8, 显示正常, E  还是ASCII-8BIT。

 

    再重建一次,,改为:

   A: id   B:string   D:string  E:string C:integer 

   这次,从数据库查出,B,D,E列utf-8,都显示正常了

 

2011-04-17 补充:

  今天遇到了这个错误:invalid date   

  http://hot88zh.iteye.com/blog/858300

  按以上博文中的方法:复制Mysql5 server端的libmysql.dll文件,到Ruby安装目录下的bin文件夹中,即可解决~

 

  之前使用mysql adapter时,ruby bin下的libmysql.dll 是一个早期版本,现在用mysql2 adapter,就需要用mysql 5 server下的libmysql.dll

 

 

 

分享到:
评论
5 楼 seamon 2011-06-27  
jerry 写道
require 'mysql' 
 
class Mysql::Result 
  def encode(value, encoding = "utf-8") 
    String === value ? value.force_encoding(encoding) : value 
  end 
   
  def each_utf8(&block) 
    each_orig do |row| 
      yield row.map {|col| encode(col) } 
    end 
  end 
  alias each_orig each 
  alias each each_utf8 
 
  def each_hash_utf8(&block) 
    each_hash_orig do |row| 
      row.each {|k, v| row[k] = encode(v) } 
      yield(row) 
    end 
  end 
  alias each_hash_orig each_hash 
  alias each_hash each_hash_utf8 
end


这块代码,还真把我的给弄坏了。呵呵


那就很抱歉了,去年我用的时候确实是没问题的。这一年估计也有不小的改变。仅供参考啊,不负直接或连带责任。呵呵。
4 楼 jerry 2011-06-25  
require 'mysql' 
 
class Mysql::Result 
  def encode(value, encoding = "utf-8") 
    String === value ? value.force_encoding(encoding) : value 
  end 
   
  def each_utf8(&block) 
    each_orig do |row| 
      yield row.map {|col| encode(col) } 
    end 
  end 
  alias each_orig each 
  alias each each_utf8 
 
  def each_hash_utf8(&block) 
    each_hash_orig do |row| 
      row.each {|k, v| row[k] = encode(v) } 
      yield(row) 
    end 
  end 
  alias each_hash_orig each_hash 
  alias each_hash each_hash_utf8 
end


这块代码,还真把我的给弄坏了。呵呵
3 楼 seamon 2011-06-23  
1、如果你安装了devkit,可以指定mysql的安装路径进行编译。

gem install mysql2 -v 0.x.x -- --with-mysql-dir=x:/path/to/mysql


mysql2是兼容windows的,看ext目录下的源码就能看出来。除了有前几天有几个版本编译不通过之外,其它的都一切正常。

2、如果你要同时用ruby 1.9和mysql gem,可以给mysql gem打个补丁。

require 'mysql'

class Mysql::Result
  def encode(value, encoding = "utf-8")
    String === value ? value.force_encoding(encoding) : value
  end
  
  def each_utf8(&block)
    each_orig do |row|
      yield row.map {|col| encode(col) }
    end
  end
  alias each_orig each
  alias each each_utf8

  def each_hash_utf8(&block)
    each_hash_orig do |row|
      row.each {|k, v| row[k] = encode(v) }
      yield(row)
    end
  end
  alias each_hash_orig each_hash
  alias each_hash each_hash_utf8
end


这个补丁是我去年尝鲜ruby 1.9时用的,那时候是好用的。现在我早就改回ruby 1.8了,不知道现在这补丁还能不能用。要是不好用,仅作参考,不负责任。

3、libmysql.dll的问题,你可以用mklink做个symbol link,把mysql安装路径里的文件软链到ruby/bin里,这样就不存在版本过期的问题了。
2 楼 edokeh 2011-06-17  
按照lz的方法装好了,但是还是有问题,而且现象很诡异
在rails console下测试model和controller都是好的
用app.get "/users" 都能看到返回数据
但是用浏览器访问时就是卡死,不知道为什么
1 楼 wtools.cn 2011-04-13  
刚发布的mysql2 0.2.7在windows上安装是有问题,装0.2.6没问题。

相关推荐

    rails3.1.0解决数据库取出来的信息编码为utf-8

    标题 "rails3.1.0解决数据库取出来的信息编码为utf-8" 指向的是在使用Rails 3.1.0版本时遇到的一个常见问题,即从数据库检索的数据编码不是预期的UTF-8格式,导致显示异常或乱码。在Rails应用中,数据的正确编码对于...

    ruby rails demo

    (2)安装Rails3 gem install rails (3)安装sqlite3 gem install sqlite3-ruby 安装sqlite3时候会提示你从链接中下载sqlite3.dll到ruby安装目录的bin文件夹下! (4)安装mysql gem install mysql2 创建项目: rails ...

    Ubuntu 11.04安装Ruby on rails 连接MySQL数据库.pdf

    ### Ubuntu 11.04下Ruby on Rails与MySQL数据库集成指南 #### 一、安装与配置MySQL数据库 在Ubuntu 11.04环境中,安装MySQL数据库是部署Ruby on Rails应用的重要步骤之一。首先,通过打开终端并执行以下命令进行...

    react-rails-chat:react-rails 示例应用程序

    自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不...

    Rack::UTF8Sanitizer.zip

    Rack::UTF8Sanitizer 是一个 Rack 中间件用来清理 URI 和 HTTP 请求头部中包含的无效 UTF-8 字符。Rails 的使用方法:config.middleware.insert 0, Rack::UTF8SanitizerRack 的使用方法:use Rack::UTF8Sanitizer

    rails3.1安装与mysql配置 windows

    标题 "rails3.1安装与mysql配置 windows" 涉及到的是在Windows操作系统上安装Ruby on Rails 3.1框架并配置MySQL数据库的过程。这是一个关键的开发环境设置步骤,对于使用Rails进行Web开发的程序员来说至关重要。Ruby...

    docker-rails6-mysql8:Rails的mysql设置

    docker-rails6-mysql8 启动Rails设置 跑新轨道 $ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker docker镜像构建 $ docker-compose build 编辑database.yml ...

    rails-rail-in:rails-rail-in 用于查找印度铁路信息,例如火车列表、车站列表、路线、票价、PNR 状态、座位可用性等

    Rails::Rail::In rails-rail-in 用于查找印度铁路信息,例如火车列表、车站列表、路线、票价、PNR 状态、座位可用性等。 安装 要使用 Bundler 安装,请获取最新的稳定版本: gem 'rails-rail-in' , '~&gt; 1.0.0' ...

    Android代码-SAF-Kotlin-Router

    SAF-Kotlin-Router ...早期参考了rails框架的router功能,它能够非常简单地实现app的应用内跳转,包括Activity之间、Fragment之间实现相互跳转,并传递参数。 本框架的saf-router-compiler、saf-router-annot

    rails-react-test:使用react-rails和docker测试Rails应用程序

    Rails Docker示例该应用程序的Docker设置来自以下: :入门要开始运行: docker-compose build 然后运行: docker-compose up 要连接到正在运行的应用程序容器,请运行: docker exec -it restarone_app /bin/sh 可以...

    ruby安装升级及命令自行编译安装非APTGET方式安装升级的办法

    ### Ruby的手动编译安装与升级方法 #### 引言 Ruby是一种动态、面向对象的脚本语言,常被用于Web开发。对于开发者而言,掌握Ruby的安装与配置至关重要。Ubuntu用户通常会依赖于包管理工具`apt-get`来安装Ruby,...

    The rails4 way

    ### 关于《The Rails 4 Way》的知识点总结 #### 书籍概述 《The Rails 4 Way》是一本深入探讨Ruby on Rails 4框架特性的专业书籍,由Obie Fernandez、Kevin Faustino和Vitaly Kushner共同撰写。本书旨在为开发者...

    jasmine-jquery-rails:Jasmine-jQuery for Rails

    jasmine-jquery的Rails jasmine-jquery通过资产管道 安装 将此行添加到您的应用程序的Gemfile中: gem 'jasmine-jquery-rails' 然后执行: $ bundle 假设您使用的是茉莉花宝石,则在jasmine.yml中具有: src_...

    CVE-2020-8163:CVE-2020-8163-在Rails中远程执行用户提供的本地名称的代码

    CVE-2020-8163-在Rails中远程执行用户提供的本地名称的代码 在Rails &lt;5.0.1中远程执行用户提供的本地名称 5.0.1之前的Rails版本中存在一个漏洞,该漏洞将允许攻击者控制render调用的locals参数。 已为该漏洞...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    CVE-2019-5418:CVE-2019-5418-Ruby on Rails上的文件内容披露

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,被广泛应用于敏捷开发。在2019年,一个名为CVE-2019-5418的安全漏洞被发现,这个漏洞允许攻击者...

    Windows下Redmine-1.3.0安装笔记

    - `mysql&gt; create database redmine character set utf8;` - `mysql&gt; create user 'redmine'@'localhost' identified by 'redmine';` - `mysql&gt; grant all privileges on redmine.* to 'redmine'@'localhost';` ...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    《Ruby on Rails与MySQL环境配置详解》 在开发基于Web的应用程序时,Ruby on Rails(简称Rails)框架和MySQL数据库的结合是常见的选择。本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及...

Global site tag (gtag.js) - Google Analytics