用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > mysql教程

mysql5 插入中文乱码问题

时间:2015-01-23  来源:西部数据  作者:西部数据

我们经常会碰到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'");
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门