`
xvridan
  • 浏览: 36790 次
  • 性别: 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会出现错误

相关推荐

Global site tag (gtag.js) - Google Analytics