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中文问题以及原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值