当前位置:首页 > Mysql教程 > 列表

mysql5 插入中文乱码问题

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-08 15:38:20 浏览: 评论:0 

我们经常会碰到mysql数据库保存中文乱码这个问题,今天我又碰到了,我的原因是以前使用的是latin1的默认编码, 以前的程序插入中文乱码 ,以前的写法:在source中加入charset=gb2312,然后在插入前执行set names gb2312即可

latin1即是iso8859-1, 所以在插入之前需要将内容转换为iso8859-1, 如下:

  1. Encoding iso88591 = Encoding.GetEncoding("iso8859-1");  
  2. Encoding df = Encoding.Default;  
  3.    
  4. byte[] gb2312bytes = df.GetBytes(content);  
  5.  //byte[] asciiBytes = Encoding.Convert(df, iso88591, gb2312bytes);  
  6. tring str = iso88591.GetString(gb2312bytes); 

这样转换之后,source中不用加入charset参数,程序中也不需要先执行set names **, 即可正常插入,如果是mysql服务器我们不知道编码可参考下面方法解决.

mysql的字符集是utf8的,光看这点害人不浅,登录linux,mysql -uroot -p,进入mysql.

命令:SHOW VARIABLES LIKE 'character_set_%';代码如下:

  1.   +--------------------------+----------------------------+ 
  2. | Variable_name            | Value                      | 
  3. +--------------------------+----------------------------+ 
  4. | character_set_client     | latin1                     |  
  5. | character_set_connection | latin1                     |  
  6. | character_set_database   | latin1                     |  
  7. | character_set_filesystem | binary                     |  
  8. | character_set_results    | latin1                     |  
  9. | character_set_server     | latin1                     |  
  10. | character_set_system     | utf8                       |  
  11. | character_sets_dir       | /usr/share/mysql/charsets/ |  
  12. +--------------------------+----------------------------+  

只有character_set_system是utf8。

vi /etc/my.cnf 

mysql的默认配置文件以及目录,编辑如下:

  1. [mysqld] 
  2. default-character-set=utf8 
  3.  
  4.  --之后: 
  5. service mysql stop 
  6. service mysql start 

重启后,再次查看SHOW VARIABLES LIKE 'character_set_%';代码如下:

  1. +--------------------------+----------------------------+ 
  2. | Variable_name            | Value                      | 
  3. +--------------------------+----------------------------+ 
  4. | character_set_client     | latin1                     |  
  5. | character_set_connection | latin1                     |  
  6. | character_set_database   | utf8                       |  
  7. | character_set_filesystem | binary                     |  
  8. | character_set_results    | latin1                     |  
  9. | character_set_server     | utf8                       |  
  10. | character_set_system     | utf8                       |  
  11. | character_sets_dir       | /usr/share/mysql/charsets/ |  
  12. +--------------------------+----------------------------+ 

此时,character_set_database已经是utf8,工程已经不再乱码,可以再添加如下一句:

  1. [client] 
  2.  
  3. default-character-set=utf8 

也可登录的时候,要用以下命令:mysql --default-character-set=utf8 -u root -p,则,代码如下:

  1. +--------------------------+----------------------------+ 
  2. | Variable_name            | Value                      | 
  3. +--------------------------+----------------------------+ 
  4. | character_set_client     | utf8                       |  
  5. | character_set_connection | utf8                       |  
  6. | character_set_database   | utf8                       |  
  7. | character_set_filesystem | binary                     |  
  8. | character_set_results    | utf8                       |  
  9. | character_set_server     | utf8                       |  
  10. | character_set_system     | utf8                       |  
  11. | character_sets_dir       | /usr/share/mysql/charsets/ |   

最后如果你是php连接mysql中文乱码可参考下办法解决.

就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

  1. $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); 
  2. mysql_query("SET NAMES 'GBK'");

Tags: mysql5插入乱码 mysql5中文乱码

分享到: