乱码问题不要想得太复杂

转载 2007年10月16日 01:23:00


原贴:http://bbs.doit.com.cn/viewthread.php?tid=43317

乱码问题不要想得太复杂

在你的php文件里的下列位置加上一条就行了
$myconn=mysql_connect("localhost","root","root");
mysql_query("set names 'gb2312'");
或者mysql_query("set names 'UTF-8*'");就差不多了MYSQL里面就不要乱改了
用SHOW VARIABLES LIKE 'character_set_%';看看就差不多了

再谈升级MySQL出现乱码问题的解决

原文发表在
http://mlsx.xplore.cn/read.php/502.htm
作者:mlsx
转贴请著名出处
-----------------------------------------------------------------------------------------------------------------------------

好早以前写过一篇关于MySQL升级到4.1出现乱码如何解决的帖子, 他只是讲述了当你导入的数据都正常了,该怎么使用到MySQL4.1以后版本的多语言特征。但是如果在导入的过程中就遇到了字符集的问题,该怎么办呢?就 是无论你怎么导入,怎么折腾字符集,都是乱码,但是你新插入的任何一条数据都没有问题,这就不是升级后调整字符集的问题了,而是在导出导入的工程中就需要 考虑。

UP这两天估计被这个问题折腾的够呛,虽然事后找到的原因不是在于数据库,但是这里还是把升级的过程记录下来。今天up问我上次论坛如何升级和转换的,我就记得不太清楚了。

我自己试验成功的有两种方式
1)只需要把你原来版本的数据库文件考到到新的数据库目录下,什么都不用修改,这个时候输出应该是正常的,默认采用了latin1字符集。这大概只最简单的方式了,不过这种方式不太好的地方在于一旦将来要转换字符集,很是麻烦。

2)假设你要从MySQL4.0以下版本升级到MySQL4.1以上版本,并明确指定需要的字符集是gb2312,那么我的步骤是
a)在原来的数据库上导出你要的数据库,可以使用下面的命令:
复制内容到剪贴板
代码:
$mysqldump -u username -p password databasename >xxx.sql
b)修改导出的sql文件,首先将导出的数据表加上默认字符集gb2312,可以在vi中只用下面的替换命令
复制内容到剪贴板
代码:
% s/engine=MyISAM;/engine=MyISAM DEFAULT CHARSET=GB2312;/g
当然你可以使用你喜欢的编辑器来替换;其次是将这个sql文件转化成gb2312编码格式的文件。你可以先file看看该文件的字符集,如果是ISO8859的,那还不错,如果是Non-ISO格式,那就必须转换,可以使用下面的命令
复制内容到剪贴板
代码:
iconv -c -t gb2312 -o outout.sql xxx.sql
UP导出的数据就是Non-ISO格式。

c)连接新的数据库服务器,创建需要的数据库
复制内容到剪贴板
代码:
mysqladmin -uroot -p create databasename
d)在导入数据之前,看看默认的字符集,可以使用下面的方法
复制内容到剪贴板
代码:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
默认的字符集都是latinn1的,这个时候,你需要将latin1转换成gb2312,方法如下
复制内容到剪贴板
代码:
mysql> set NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
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/  |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
这时数据库字符集已经修改,可以导入数据了
复制内容到剪贴板
代码:
mysql>source /path/to/xxx.sql
然后在你的网页中,在连接数据后,加上下面的一条指令
复制内容到剪贴板
代码:
mysql_query(”set NAMES 'utf8'");
应该就可以了,当然你的网页编码本身应该也要式gb2312的。

那么UP为什么会要折腾两天呢?不是他的步骤和方法有问题,而是操作系统的问题!操作系统?ubuntu!
问题就出现在iconv转换的过程中,只要转换成GB2312,那些中文就成了空白,而同样的文件,在其他Linux操作系统上就不会出现这个问题,难道 式ubuntu并不支持GB2312?还是别的原因,个人没有使用过ubuntu,不太清楚他的字符集和字体支持是如何的,不过想来我用过的 redhat,fedora,suse确实都在字符集和中文字体方面有些欠缺。这个方面,红旗Linux显然要优秀一些。
 

C++还能重新辉煌吗?C++复杂性的思考

好多年前的文章,来源已经不知道了,但是读了还是深有感触,接触了C++和Java两种语言,真是觉得C++的高层次的库太匮乏了,乱而杂,重复造了好多个小轮子(或者还可能是破轮子),除了一个我不太了解的AC...
  • gogdizzy
  • gogdizzy
  • 2016年01月28日 11:29
  • 1044

NIO相关基础篇一

转载请注明原创出处,谢谢! 说在前面NIO相关知识是很多后续的一些基础知识,所以今天这篇文章仅仅是简单介绍,后续会继续有一到二篇相关NIO内容。什么是NIOJava NIO( New IO) 是从Ja...
  • lirenzuo
  • lirenzuo
  • 2017年12月10日 14:23
  • 218

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀...
  • Molipc
  • Molipc
  • 2017年11月15日 12:45
  • 147

影响Java EE性能的十大问题

本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE、中间件和JVM技术。他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题...
  • u011225629
  • u011225629
  • 2015年08月28日 19:55
  • 1102

SQL语句太复杂,怎么优化

 一、视图和存储过程的深度   视图和存储过程能够抽象出一些业务逻辑,简化设计,是很推荐的做法。但是如果在引用视图和存储过程时不加注意,视图套视图,存储过程嵌存储过程,最后嵌套上四五层,那复...
  • whazhl
  • whazhl
  • 2014年09月03日 18:43
  • 1868

复杂的CSS选择器

一.基本的CSS选择器: 1.通配符    例:*{...} 2.类别选择器   例:.container{...} 3.ID选择器       例:#div1{.....} 4.群组选择器 ...
  • u014395826
  • u014395826
  • 2017年01月21日 20:44
  • 413

让自己不要太浮躁

我是一名即将毕业的大学生,长时间以来,我发现自己处于一种浮躁的状态,比如说做事的时候,我迫切地去想得到事情的结果,这让我忘了“过程”的重要性;还例如:在一个较短的时间内,我自己想去做非常多的工作,坦白...
  • ljt2724960661
  • ljt2724960661
  • 2016年05月11日 12:40
  • 811

为什么说程序员的前三年不要太看重工资水平?

文章转自知乎,原文地址是:http://www.zhihu.com/question/26760323 为什么说程序员的前三年不要太看重工资水平? 这是很多程序界的”过...
  • yubo_725
  • yubo_725
  • 2014年12月03日 13:55
  • 4671

不要太在意别人的看法

我以前也是一个十分在意别人看法的人,当别人对我说:内向的人不好,没有前途。我就会认为:恩,是呀,我的性格就内向,怎么办呀。当一个女孩拒绝我的时候,我就会想:她拒绝我一定是我不好。就算是什么都不说,别人...
  • u013338165
  • u013338165
  • 2015年03月04日 10:05
  • 482

孩子教育,不要只看重分数!

不管成绩怎样,没有什么优生差生的区别。   开学了,一个班主任给家长发了一则短信:   不管成绩怎样,没有什么优生差生的区别。家长们知道,每一个小孩都是种子,只是每个人花期不同,有的花一开...
  • mimi00x
  • mimi00x
  • 2016年07月08日 10:17
  • 807
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:乱码问题不要想得太复杂
举报原因:
原因补充:

(最多只允许输入30个字)