解决rails与mysql结合使用时的中文乱码问题

本文介绍了解决 Rails 应用中 MySQL 数据库中文乱码的问题。主要步骤包括:确保 MySQL 编码为 utf8;在 database.yml 文件中设置 encoding 为 utf8;并确认 rhtml 文件使用 UTF-8 编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rails MySQL 中文乱码问题解决
2008-03-02 16:01

 

RoR+MySQL搭建的程序。
当输入英文的时候,程序不报错,当输入中文出现的错误提示:

Mysql::Error: #HY000Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=': SELECT * FROM `users`   WHERE (`users`.`email` = '阿')  LIMIT 1

这是字符编码混合而产生的错误,解决办法是将表的编码修改成一致的。
语法:ALTER TABLE tbl_name CONVERT TO CHARACTER SET   utf8;  

也可以通过migrate指定:
  1. class CreateUsers < ActiveRecord::Migration   
  2.   def self.up   
  3.      create_table :users, : options => 'CHARSET=utf8' do |t|   
  4.        t.column :name:string  
  5.        t.column :password:string  
  6.        t.column :birthday:datetime  
  7.        t.column :email:string  
  8.        t.column :address:text  
  9.     end  
  10.   end  
  11.   
  12.   def self.down   
  13.      drop_table :users  
  14.   end  
  15. end  

其实解决中文问题很简单: 

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

1、确定MySQL数据库编码是utf8

     跟上面同理

2、database.yml里面增加encoding: utf8

development:
adapter: mysql
encoding: utf8
database: song
username: root
password: 
host: localhost

3、确定rhtml文件编码是UTF-8

修改application.rb文件:
class ApplicationController < ActionController::Base

before_filter :set_charset   
before_filter :configure_charsets  

#中文乱码解决方案
def set_charset   
    headers["Content-Type"] = "text/html; charset=utf-8" 
end   

def configure_charsets   
    response.headers["Content-Type"] = "text/html; charset=utf-8" 
    suppress(ActiveRecord::StatementInvalid) do 
      ActiveRecord::Base.connection.execute 'SET NAMES UTF8' 
    end
   
end

end
在网页中,添加meta标签:
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值