发现用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的默认校对规则。 否则,采用默认的字符集和服务器校对规则。

可以看看MySQL Unicode Character Setsutf8_unicode_ci vs utf8_general_ci

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: php和phpMyAdmin向mysql数据库插入中文数据导致乱码 – https://www.chenyudong.com/archives/insert-chinese-data-into-mysql-causing-garbled-via-php-and-phpmyadmin.html