Ruby on Rails + Mysql 4.1 解决GBK编码问题
1、设置Mysql默认字符集为GBK,默认存储引擎为MYISAM
2、打开Rails目录中的./app/controllers/application.rb,默认为
# Filters added to this controller will be run for all controllers in the application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
end
修改为
# Filters added to this controller will be run for all controllers in the application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
before_filter :set_charset
before_filter :configure_charsets
def set_charset
@headers["Content-Type"] = "text/html; charset=gbk"
end
def configure_charsets
@response.headers["Content-Type"] = "text/html; charset=gbk"
# Set connection charset. MySQL 4.0 doesn't support this so it
# will throw an error, MySQL 4.1 needs this
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute 'SET NAMES GBK'
end
end
end
这里 set_charset方法定义了html页面的编码,也就是显示数据的方法,configure_charsets方法定义了存取数据库的编码
3、此方法在Mysql 4.1中测试通过,Mysql 5.0不知道是否可行
4、命令行或使用Mysql客户端工具查看GBK数据出现乱码的解决办法
1)登陆时设置字符集: mysql -uroot --default-character-set=gbk
2)登陆之后设置字符集: set names 'GBK' 或 set character set gbk