今天从Mysql官网下载了当前的最新版本mysql5.5.27。通过一个小例子在本机的练习,写点自己的心得,并将使用中遇到的中文显示乱码的完美解决方法分享出来。
默认安装mysql,注意其中对root的密码设置。
运行cmd,进入mysql安装的bin目录:
cd "c:\Program Files\MySQL\MySQL Server 5.5\bin"使用root账户登录到本机mysql的shell(我的密码也为root)
mysql -hlocalhost -uroot -proot新建一个用户cd并赋予权限,设置密码
grant all privileges on *.* to cd@localhost identified by 'cd';注意:应根据自己的需要设置需要的权限和登录地点,本例中赋予了所有权限并只能在本机登录。
创建数据库并使用:
create database cdwork; use cdwork;
本人新建了txt文件并在其中写好了创建student,course和sc表以及插入相应数据的脚本,使用source执行,脚本内容如下:
Create table student (Sno char(9) primary key, sname char(40) unique, ssex char(8), sage smallint, sdept char(20));
Create table course (cno char(4), cname char(40), cpno char(4), ccredit smallint, primary key(cno), foreign key(cpno) references course(cno));
Create table sc (sno char(9) not null, cno char(4) not null, grade dec(4,1) default null, primary key(sno,cno), foreign key(sno) references student(sno) on delete cascade, foreign key(cno) references course(cno) on delete restrict);
insert into student(sno,sname,ssex,sage,sdept) values('200215121','李勇','男',20,'CS'); insert into student(sno,sname,ssex,sage,sdept) values('200215122','刘晨','女',19,'IS'); insert into student(sno,sname,ssex,sage,sdept) values('200215123','王敏','女',18,'MA'); insert into student(sno,sname,ssex,sage,sdept) values('200215124','张立','男',19,'IS'); insert into course(cno,cname,ccredit) values(6,'数据处理',2); insert into course(cno,cname,cpno,ccredit) values(7,'PASCAL语言',6,4); insert into course(cno,cname,cpno,ccredit) values(5,'数据结构',7,4); insert into course(cno,cname,cpno,ccredit) values(1,'数据库',5,4); insert into course(cno,cname,cpno,ccredit) values(3,'信息系统',1,4); insert into course(cno,cname,ccredit) values(2,'数学',2); insert into course(cno,cname,cpno,ccredit) values(4,'操作系统',6,3); insert into sc(sno,cno,grade) values('200215121',1,92); insert into sc(sno,cno,grade) values('200215121',2,85); insert into sc(sno,cno,grade) values('200215121',3,88); insert into sc(sno,cno,grade) values('200215122',2,90); insert into sc(sno,cno,grade) values('200215122',3,80);注意:笔者在上述过程中曾不小心犯的几个错误。
1.在创建sc表时将sno的类型写为char(20),而对应的student表中sno的类型为char(9),因为申明了sno参照student表中的sno,mysql中数据长度不一致会导致错误。应使数据的类型长度等完全一致。
2.在为course表插入数据时,必须注意顺序问题。因为course表声明了cpno(先修课)为外键且参照自身表中的cno(课程号),所以插入记录时,这条记录的cpno的值必须作为cno已经在course表中插入时才可以被插入,所以应按照参照的课程顺序逐项插入。
各项数据准备完毕,当笔者使用select语句打算检查数据时却发现,插入的数据全部显示为乱码,查找多方资料都没有完全解决,后来自己分析并综合网上的解决方案使问题得到解决。
1.找到mysql安装目录下的my.ini文件,找到#CLIENT SECTION部分的
[mysql]
default-character-set=latin1
将其改为
[mysql]
default-character-set=utf8 (推荐使用utf8编码,即万国码)
同理,将SERVER SECTION部分的character-set-server=latin1更改为character-set-server=utf8
在mysql中执行
show variables like 'char%';查看到所有的有关字符的编码,使用set命令将除了路径和文件系统外的字符的编码均更改为utf8,比如
set character_set_server=utf8;修改为utf8后再次使用脚本插入数据会遇到以下错误:
ERROR 1366 (HY000): Incorrect string value: '\xC1\xF5\xB3\xBF' for column 'sname' at row 1
分析后恍然大悟,新建的脚本文件的默认编码为ANSI,而数据库要求的编码为utf8,其中的中文字段会冲突,将原来的脚本重新另存为utf8编码后重新执行,插入成功。
但是使用select语句查询,在屏幕上显示仍为乱码。
将character_set_results修改为GBK后,此问题得到解决,即应保留或设置
set character_set_results=GBK;综上,新手遇到的中文乱码问题得到完美解决。