`
dearsuper
  • 浏览: 65238 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

ROR+Mysql5 utf8搭配问题解决方案

阅读更多

根据探索和总结,发现在字符集的问题上,最终明智的做法是使操作系统、数据库、程序编码都采用utf8格式。而不要试图使其中的某一个改用GBK,否则会出现难于搭配配置的问题,后悔莫及。如果有的人愿意用gb2312的话,呵呵,真实应用起来就知道,我们中文文化博大精深,很多大字符集的字其实是我们需要用到的。

  起初也是碰到问题,找了若干答案,最终解决办法如下:
  1、确定mysql数据库编码是utf8
  2、database.yml里面增加encoding: utf8
  3、确定编辑器的保存文件格式为:UTF-8,保证rhtml文件编码是UTF-8,如果是radrails,点击项目,右键选择属性来设置。

 
  其中,第1条的设置步骤:
  1.1 如果是windows版本的mysql,那么在安装的时候,系统就会提示用哪种编码,设置好了,一劳永逸。
    如果安装的时候设置错误了,修改mysql安装目录下的my.ini文件:
    [mysql]
    default-character-set=utf8
    ...
    # The default character set that will be used when a new schema or table is
    # created and no character set is defined
    default-character-set=utf8
    配置好后,重启mysql。
  1.2 如果是linux版本的mysql(我用centos5)
  1.2.1首先要确保centos5以中文方式安装,我测试过先按英文方式安装,可后来怎么也配不上中文字符集。重新用中文方式安装,字符集都会自动加载了,免去很多烦恼。
    如果不放心,确认一下:
    vi /etc/sysconfig/i18n (确保其内容是这样的.)
    LANG="zh_CN.UTF-8"
    查看变量:env
    export  LANG=zh_CN.UTF-8
    如果都是这样,就正确了!
  
  1.2.2修改mysql的配置文件,使数据库与服务器操作系统的字符集设置一致。
    vi /etc/my.cnf 设置(如果没有发现这个文件,就新建1个)
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    default-character-set=utf8  (增加的关键一句,使得数据库缺省以utf8存储)
    当然,修改后,要重启数据库。
   
    再次用mysql -u root -p命令进入数据库系统,用SHOW VARIABLES LIKE 'character_set_%';命令查看到如下内容:
+--------------------------+-----------------------------------------------------------------------+
| Variable_name            | Value                                                                 |
+--------------------------+-----------------------------------------------------------------------+
| character_set_client     | latin1                                                                |
| character_set_connection | latin1                                                                |
| character_set_database   | utf8                                                                  |
| character_set_filesystem | binary                                                                |
| character_set_results    | latin1                                                                |
| character_set_server     | utf8                                                                  |
| character_set_system     | utf8                                                                  |
| character_sets_dir       | /usr/local/mysql-5.1.20-beta-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+-----------------------------------------------------------------------+
    发现关键项目已经用了utf8,但这样还不够,还要保证客户端也是用utf8的字符集来操作的
    登录的时候,要用以下命令:mysql --default-character-set=utf8 -u root -p
  
    再次用SHOW VARIABLES LIKE 'character_set_%';命令查看,结果变成了:
+--------------------------+-----------------------------------------------------------------------+
| Variable_name            | Value                                                                 |
+--------------------------+-----------------------------------------------------------------------+
| character_set_client     | utf8                                                                  |
| character_set_connection | utf8                                                                  |
| character_set_database   | utf8                                                                  |
| character_set_filesystem | binary                                                                |
| character_set_results    | utf8                                                                  |
| character_set_server     | utf8                                                                  |
| character_set_system     | utf8                                                                  |
| character_sets_dir       | /usr/local/mysql-5.1.20-beta-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+-----------------------------------------------------------------------+
    这样才能保证客户端所发命令都是基于utf8格式的,比如说建立数据库和表,默认就会以utf8编码,而无须再次指定。
 
    另外提一句,如果是jsp,页面定义成:<!---->就可以与数据库的utf8搭配了。而实验发现,如果改成:charset=utf8是有问题的。

分享到:
评论
5 楼 carlosbdw 2008-06-30  
不错,谢谢啦!
4 楼 yongyuan.jiang 2008-04-01  
非常好,装confluence乱码问题,果真是字符集问题,按上面步骤解决了~

总结归纳,我转载了:

装confluence,使用mysql乱码,查出是mysql编码设置问题:

最终解决方案:
mysql UTF8设置:

vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8  (数据库缺省以utf8存储)
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

[client]
default-character-set=utf8 (客户端缺省以utf8存储)

重启mysql

登陆mysql,查看:
show variables like 'character%';


+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+


3 楼 glchengang 2007-09-13  
vincent253 写道
在linux下修改3个my.cnf的1个/etc/mysql/my.cnf文件

找到客户端配置[client] 在下面添加
default-character-set=utf8 默认字符集为utf8
在找到[mysqld] 添加
default-character-set=utf8 默认字符集为utf8
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)



今天总算看到了。以前我用mysql命令行,都是用一次在命令行里设置一次,汗!
谢谢
2 楼 dearsuper 2007-09-13  
这样就全面了!感谢。
1 楼 vincent253 2007-09-11  
在linux下修改3个my.cnf的1个/etc/mysql/my.cnf文件

找到客户端配置[client] 在下面添加
default-character-set=utf8 默认字符集为utf8
在找到[mysqld] 添加
default-character-set=utf8 默认字符集为utf8
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

修改好后,重新启动mysql 即可,查询一下show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

这样就不用每次连接 都使用  --default-character-set=utf8 了

相关推荐

Global site tag (gtag.js) - Google Analytics