发现用phpMyAdmin向MySQL数据库中插入中文数据乱码,通过php插入中文数据也是乱码。于是就查看数据库中对字符的处理。
我先向数据库中创建一个表webgrades
create table webgrades(班级 varchar(20) ,学号 varchar(11) ,姓名 varchar(10) ,成绩 int (3) );
然后用phpmyadmin向MySQL中插入中文数据乱码,其中SQL语句是这样的
insert into webgrades values("计算机2002.1","20020100101","王丽",95);
,在phpmyadmin中显示中文就出现 “????” 乱码了,怎么办呢?
查看该表的属性,在“操作”->”表选项”中看见”整理”这个下拉框中显示”latin1_swedish_ci”,发现不对,应该使用unicode码,于是将其改成”utf8_general_ci“。再次向表中插入数据,发现中文还是乱码。
查看“表结构”,发现每个字段后面的“整理”都为”latin1_swedish_ci”,于是将其更改成”utf8_general_ci“,再向表中插入中文数据,不显示乱码了。
在创建表的时候应该先添加字段的编码,在字段类型后面添加”CHARACTER SET utf8 COLLATE utf8_general_ci“,比如SQL语句
create table webgrades(
班级 varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci,
学号 varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci,
姓名 varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci,
成绩 int (3));
那么CHARACTER SET utf8 COLLATE utf8_general_ci是干什么用的呢?
如果表的结构指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。
如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
否则,采用默认的字符集和服务器校对规则。