`
xvridan
  • 浏览: 37332 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

rails中文问题(mysql乱码)

阅读更多
实在不好意思在开这样的帖子,关于这个问题的帖子也不少了,不过找了一堆还是没有解决。

这个问题一般的解决方法:
[quote]
1.在radrails中,请在project的property对话框中,左边选中info节点,右边设置编码方式为UTF-8

2.修改MySQL的配置文件C:\Program Files\MySQL\MySQL Server 5.0\my.ini,改其中的两处default-character-set=utf8,改完后重启MySQL(windows服务)。这一步也可采 用instance wizard来做。

3.运行你的建库脚本,建库脚本中无须涉及到任何编码问题。

4. 修改ApplicationController 如下:

ruby 代码
 
  1. class ApplicationController < ActionController::Base  
  2.   before_filter :configure_charsets  
  3.   
  4.     def configure_charsets  
  5.       @response.headers["Content-Type"] = "text/html; charset=utf-8"  
  6.       suppress(ActiveRecord::StatementInvalid) do  
  7.           ActiveRecord::Base.connection.execute 'SET NAMES utf8'  
  8.       end  
  9.     end  
  10. end  


5.请在rhtml中,或者适当的layout中,加上:
 

至此,无论是在Mysql中,前台页面中,还是在IDE中,都能正常使用中文

6.关于ruby本身的中文字串处理问题,例如size,substring等,请查看此文
http://www.blogjava.net/cap/archive/2006/12/14/87830.html
[/quote]
这在railscn.com上已经结帖了,别处也是乎大同小异。

但:
一、页面中文问题是乎不用这麻烦:
只要将rails所有的文件用utf-8格式保存(其它的都可不要),就可是很好的支持中文显示。
在rails 1.1.6和1.2.2下都测试正常(windows和linux都测试过)

二、mysql中文问题却比较麻烦:
1.rails所有的文件用utf-8格式保存,将mysql的编码为utf-8,页面可以正常读、写、显示,可mysql所是一堆乱码。
2.然后layout中,加上:  ,没有解决问题
3.接着,修改ApplicationController 如下:
ruby 代码
 
  1. class ApplicationController < ActionController::Base  
  2.   before_filter :configure_charsets  
  3.   
  4.     def configure_charsets  
  5.       @response.headers["Content-Type"] = "text/html; charset=utf-8"  
  6.     end  
  7. end  
没有解决问题
4.继承修改ApplicationController
ruby 代码
 
  1. class ApplicationController < ActionController::Base  
  2.   before_filter :configure_charsets  
  3.   
  4.     def configure_charsets  
  5.       @response.headers["Content-Type"] = "text/html; charset=utf-8"  
  6.       suppress(ActiveRecord::StatementInvalid) do  
  7.           ActiveRecord::Base.connection.execute 'SET NAMES utf8'  
  8.       end  
  9.     end  
  10. end  
于是得到如下错误:

ActiveRecord::StatementInvalid in CompanyuserController#create

Mysql::Error: #HY000Incorrect string value: '\xE5\x9C\xA8' for column 'name' at row 1: INSERT INTO company_users (`name`, `companyId`, `username`, `tel`, `note`, `address`) VALUES('在', 245, '', '', '', '')

RAILS_ROOT: ./script/../config/..

suppress方法我并不熟悉,大概是使执行数据库操作时使用utf-8编码。

5.又看到一种方法:在
database.yml文件中加上 encoding: utf8。
于是,去掉2、3、4运行,依然得到4的错误。加上2、3、4(一步一步加)错误依旧。

这个问题,我怀疑Http请求将utf8编码转换在gb2312,由是就将mysql改为utf8结果,存入数据库的数据仍然出现。

看到bd7lx的博客上有一篇文章《 gettext 汉化的*正规*正轨*而且还是简单的方法 》是乎是解决之道,但没有试用。还是想明白在无插件下怎么解决mysql中文问题以及原理。
分享到:
评论
8 楼 xvridan 2007-06-01  
robbin 写道
其实解决中文问题很简单:

1、确定MySQL数据库编码是utf8
2、database.yml里面增加encoding: utf8
3、确定rhtml文件编码是UTF-8

其实:我的中文问题,是没有问题。
robbin回复后,我就觉得可能是windows的cmd问题,一直想把这个问题结了,可有些事情去做别的去了。
因为myql客户端我使用的windows的命令行,当时我怀疑是cmd把mysql的UTF-8换成GB2312或者其它的中文编码了,所以显示的是乱码。
前些天打开cmd属性一看,果然是GBK,然后安装了MySQL Query Browser 于是真相大白--正确的汉字显现出来了。

另:database.yml里面增加encoding: utf8报错的问题,这次确没有遇到。找不到当时的环境,想想可能最大的就是
robbin 写道

只不过很多人不知道应该如何正确设置数据库编码,在windows平台,如果安装的时候创建的数据库不是utf8,后来再怎么修改配置文件也白费。这一点,只要你创建一个表,去看看这个表的varchar字段的编码就知道究竟有没有改过来了。


操作字符编码与数据库字段编码不相符吧
7 楼 mail07 2007-05-23  
先把数据库的数据导出,然后再按utf-8导入就可以了
6 楼 liping 2007-04-19  
robbin 写道
其实解决中文问题很简单:

1、确定MySQL数据库编码是utf8
2、database.yml里面增加encoding: utf8
3、确定rhtml文件编码是UTF-8

这样就搞定了。

只不过很多人不知道应该如何正确设置数据库编码,在windows平台,如果安装的时候创建的数据库不是utf8,后来再怎么修改配置文件也白费。这一点,只要你创建一个表,去看看这个表的varchar字段的编码就知道究竟有没有改过来了。


中文问题就用上面三点就可以解决的!就是数据库中列的编码怎么改成utf-8的默认的好像是lant-1什么的
修该了表的编码,那些vatchar列的编码还是lant-1的。该怎么办!?
5 楼 robbin 2007-04-01  
针对表加没有用,关键还是字段
4 楼 花花公子 2007-04-01  
robbin 写道
其实解决中文问题很简单:

1、确定MySQL数据库编码是utf8
2、database.yml里面增加encoding: utf8
3、确定rhtml文件编码是UTF-8

这样就搞定了。

只不过很多人不知道应该如何正确设置数据库编码,在windows平台,如果安装的时候创建的数据库不是utf8,后来再怎么修改配置文件也白费。这一点,只要你创建一个表,去看看这个表的varchar字段的编码就知道究竟有没有改过来了。


也可以针对表加UTF-8编码
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users, : options => 'CHARSET=utf8' do |t|
      t.column :name, :string
      t.column :password, :string
      t.column :birthday, :datetime
      t.column :email, :string
      t.column :address, :text
    end
  end

  def self.down
    drop_table :users
  end
end
3 楼 langyong314 2007-04-01  
接此贴问个问题,要是我的mysql不是3306端口的话,yml里面port应该怎么设置呢。。好像打端口号不对的。
2 楼 robbin 2007-04-01  
其实解决中文问题很简单:

1、确定MySQL数据库编码是utf8
2、database.yml里面增加encoding: utf8
3、确定rhtml文件编码是UTF-8

这样就搞定了。

只不过很多人不知道应该如何正确设置数据库编码,在windows平台,如果安装的时候创建的数据库不是utf8,后来再怎么修改配置文件也白费。这一点,只要你创建一个表,去看看这个表的varchar字段的编码就知道究竟有没有改过来了。
1 楼 xvridan 2007-04-01  
看来没有人解答了。。。
换个问题问一下:各位的MySQL数据库中的中文可以正常显示吗?(我的没有装可视化客户端)
另:
为什么在database.yml文件中加上 encoding: utf8会出现错误

相关推荐

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    rails3.1安装与mysql配置 windows

    由于在Windows上直接安装可能会遇到问题,可以尝试使用预编译的二进制版本,或者在命令行中运行`gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\path\to\mysql\installation"`,其中"C:\path\to\mysql...

    rails和mysql数据库连接中出现的问题以及解决办法

    然而,有时在尝试连接Rails应用到MySQL数据库时,可能会遇到一些问题。本篇文章将深入探讨这些常见问题及其解决方案。 首先,Rails与MySQL的连接问题可能源于配置不正确。在`config/database.yml`文件中,你需要...

    Rails中上传文件保存中文文件名乱码

    在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称...通过这些方法,可以有效地解决Rails应用在处理中文文件名时可能出现的乱码问题,从而提高用户体验并保证数据的完整性和一致性。

    Ruby on Rails安装及MySQL数据库配置指南

    在安装和配置 Ruby on Rails 和 MySQL 数据库的过程中,可能会遇到一些问题。例如,在创建 POSTS 应用时可能会遇到问题,创建数据后数据库中有数据,但是到 Listing posts 界面无法查看,总是报错。解决方法是下载 ...

    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及...

    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 ...

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

    这一步是关键,它指定了MySQL的默认字符集为UTF-8,从而避免了中文乱码的问题。 #### 二、安装与配置Ruby on Rails Ubuntu 11.04默认包含Ruby 1.8.7和Rails 2.3.5,但为了更好的兼容性和性能,建议手动更新或安装...

    ruby on rails MySql

    在Rails中集成MySQL,你需要安装特定的数据库适配器,即`mysql2` gem。这个gem允许Rails与MySQL数据库进行通信,处理SQL查询并管理数据库连接。在`Gemfile`中添加以下行来安装`mysql2` gem: ```ruby gem 'mysql2' ...

    gem安装、rails安装、mysql库文件安装

    1.安装gem,进入gem文件夹,里面有个setup文件,直接双击就行了。 2.进入rails目录使用gem命令安装(这一步必须要上...3.复制libmySQL.dll到ruby的安装目录的bin文件夹下,然后使用gem安装mysql-2.7.3-x86-mswin32.gem.

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    rails 连接mysql的问题解决

    – c:/ruby/lib/ruby/gems/1.8/gems/mysql-2.7.3-x86-mswin32/ext/mysql.so 实际上是找不到连接所需的dll文件:libmySQL.dll 在mysql安装目录下的bin目录下将此文件复制到ruby的bin目录下即可解决此问题. ...

    Ruby on Rails中文指南

    在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 首先,让我们深入理解Rails的核心概念: 1. **路由(Routes)**:Rails的路由系统是应用程序的导航蓝图...

    用于Ruby 和 Rails 项目的 MySQL 驱动程序.zip

    Ruby 的现代、简单且非常快速的 Mysql 库 - 绑定到 libmysql Mysql2 gem 旨在服务于连接、查询和迭代结果的极其常见的用例。那里的一些数据库库作为已经很复杂的可用 C API 的直接 1:1 映射。这个不是。

    中文版rails教程

    "敏捷Rails中文教程.pdf"这个文件名暗示着教程可能涵盖Rails的敏捷开发实践。学习Rails的过程中,除了阅读文档,还可以参考在线教程、视频课程、社区论坛和开源项目,以加深理解和实践。Rails社区活跃,有许多优秀的...

    Rails中使用MySQL分区表一个提升性能的方法

    在Rails应用中,当面临大数据表的处理时,MySQL的分区表是一个实用的优化策略,可以显著提升查询性能。MySQL的分区表特性允许我们将一张大表分割成多个小表,以便于管理和加速查询。在本例中,针对一个名为diet_...

    Agile+Web+Development+with+Rails中文版.pdf

    《Agile Web Development with Rails》是一本经典的Rails开发指南,中文版的出版使得更多的中国开发者能够深入理解并应用敏捷开发方法与Ruby on Rails框架。这本书是Rails开发者的必备参考资料,它详细介绍了如何...

    RAILS2.1的中文版资料

    ### RAILS2.1的中文版资料:新特性与改进详解 #### 概述 《RAILS2.1的中文版资料》是一份针对Ruby on Rails 2.1版本的详细介绍文档,由Carlos Brando和Marcos Tapajós共同编写,并由中国Rails社区成员翻译成中文...

Global site tag (gtag.js) - Google Analytics