先前得一高人指点,做了如下SET NAMES utf8 设置后,问题依然乱码,不知该怎么做,谢谢。-- MySQL dump 10.10
--
-- Host: localhost Database: zzz
-- ------------------------------------------------------
-- Server version 5.1.7-beta/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `student`
--DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(3) default NULL,
`name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;--
-- Dumping data for table `student`
--
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
LOCK TABLES `student` WRITE;
INSERT INTO `student` VALUES (1,'鎭暚鐜�),(2,'鎴�),(3,'鍥界簿鏄�);
UNLOCK TABLES;
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--
-- Host: localhost Database: zzz
-- ------------------------------------------------------
-- Server version 5.1.7-beta/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `student`
--DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(3) default NULL,
`name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;--
-- Dumping data for table `student`
--
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
LOCK TABLES `student` WRITE;
INSERT INTO `student` VALUES (1,'鎭暚鐜�),(2,'鎴�),(3,'鍥界簿鏄�);
UNLOCK TABLES;
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> select * from s2;
+------+--------+
| id | name |
+------+--------+
| 1 | 恭敬现 |
| 2 | 我 |
| 3 | 国精明 |
+------+--------+
3 rows in set (0.00 sec) mysql> show create table s2;
+-------+-----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------+
| s2 | CREATE TABLE `s2` (
`id` int(3) default NULL,
`name` char(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |
+-------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
我完全晕了,不知道该做什么了? 在student数据里有一个s2的数据表。 在linux 图形界面下,我用mysqldump 把数据库备份到 /home/student.sql. 然后用文本编辑器打开,发现中文字体乱码。 然后想导入新的数据库,看看是否还有乱码:
新建一个数据库ww. shell>mysql -uroot -p123456 ww </home/student.sql,
在图形界面下,进入 数据库, 然后select* from s2 , 发现先前在student.sql文件中乱码,可以在linux图形界面下,正常显示中文! 有两个问题,想问,如果说在llinux命令行格式下的中文,是因为linux命令行不支持中文么?
有人说加上lang="zh_cn.gb/8030"什么的,可是我发现我的系统中有那句话,根本不用加。 所以我猜还是在数据库那里出错了,但是我不知道为什么?
到底哪错了,linux命令行格式下, select * 不显示中文,中文乱码。 在图形界面下的 student.sql中文字体乱码?
2。连接中的字符集设置,会告诉MYSQL你的客户端用的是什么字符集。
3。其它字符集变量,让MYSQL明白系统的字符集是什么!假设你的表A中字段 F 字符集为 latin1 , 它能不能存中文? 回答是能!
比如汉字 "中文" ,GB2312 编码为 D6D0CEC4 , 这时候你向F字段中存的是 D6D0CEC4 ,对MYSQL来说,这没什么不正常。 当你读的时候,自然送这个D6D0CEC4 还给你客户端软件。你客户端软件收到D6D0CEC4 自然会显示为 中文.但如果你的客户端说,我现在用的不是latin1, 是 gb2312 ,或者其它什么,这时候MySQL会根据两边的不同进行转换,这样存入字段F的并不是 D6D0CEC4 所有要看你的字符集设置。比如MYSQL把它存为 D0D6C4Ce, 但当你的客户端读的时候,MYSQL一看两边不同,还会再做一次翻译,传为客户端的仍是 D6D0CEC4 但你直接在 MYSQL 的命令下时,你的字符集设置是什么?上面的原理,我也只能这么解释了。建议你还是好好看一下那个贴子中,有一个直接到MySQL官方文档的一个更为详细的解释。
建议你贴出以下信息。在linux图形界面下
show variables like 'char%';
show create table s2;linux命令行
show variables like 'char%';
show create table s2;相信你比较一下两个环境下的 show variables like 'char%'; 就知道为什么了。
show variables like 'char%';
show create table s2;linux命令行
show variables like 'char%';
show create table s2; 生成同样的
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+所以我肯定在linux命令行下,不显示中文,是因为它不支持中文,装了个zhcon,命令行下的输入法,果然没有乱码了,可以显示中文。 在此谢谢ACMAIN_CHM的,提示。但是mysqldump 之后,生成的 txt文档还是不显示中文,数据表里的中文还是乱码?仔细看了那个帖子,还是不知道错在哪了?
show variables like 'char%';
show create table s2; 显示的效果应该决不是你上面贴出来的那样。 应该是如下格式!mysql> show variables like 'char%';
+--------------------------+--------------------------------------------------
| Variable_name | Value
+--------------------------+--------------------------------------------------
| character_set_client | latin1
| character_set_connection | latin1
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | latin1
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\cha
+--------------------------+--------------------------------------------------
8 rows in set (0.00 sec)mysql> show create table t1;
+-------+---------------------------------------------------------------------
| Table | Create Table
+-------+---------------------------------------------------------------------
| t1 | CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`col` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------
1 row in set (0.14 sec)mysql>
[mysql]default-character-set=gb2312
[mysqld]
default-character-set=gb2312 数据库中的数据,是从一个txt文档中导入的,是不是 在导入的时候,默认把数据库格式变成+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ | 的阿?
差不多解决了. 谢谢!~!!!!!