二进制
binary,varbinary,blob
声音、图像、等二进制数据与字符集无关(图像存储为二进制文件,不然存放为非二进制就把二进制转换为相应的字符集(乱码)破坏了原数据)
非二进制
char varchar text
字符集(utf8 gbk gb2312 big5)
字符集的概念
gbk、gb2312、utf8(每个字符集存储上万个字)
一个汉字有2个字节,就等于8位,比如oxfe oxfa等于一个汉字,每个汉字在电脑都是這样储存
- 简体的新华字典 gb2312
- 繁体字典 big5
- 简体繁体都有 gbk
- gb2312 :6700多个汉字,2个字节
- big5 :繁体字符集,13000多个汉字,大五码=2字节
- gbk :21000多个汉字,简体和繁体 2个字节 //大部分操作系统都
用gbk windows linux - utf8(万国码) :unicode 1-3个字节 a一个字节 盾3个字节
- unicode(万国码) :国际标准化组织制定一套涵盖世界所有语种、所有符号的编码方案
在mysql 显示出字符集
mysql> show character set;
mysql>create table cha (name1 varchar(30) character set utf8,name2 varchar(30) character set gbk);
mysql>show create table cha(表名);//查看表的字段的字符集
mysql>insert into cha(name1,name2) values("吨","吨");
mysql>select length(name1),length(name2) from cha; //读取字节
mysql>select char_length(name1),char_length(name2) from cha ;
mysql>charact set utf8 collate utf8_bin //设置字符集校对规则,有ci的都不区分大小写的。
binary(3)//表示存放3个字节的二进制数据
char(3) //存放3个字符
mysql>show variables like "%character%"; //字符集
character_set_client | gbk //客户端的字符集
character_set_connection | gbk //把客户端的发送字符集转换链接字符集,链接字符再转化成字段的字符集
character_set_database | latin1 //当前选中库的字符集
character_set_filesystem | binary //文件系统字符集
character_set_results | gbk //当服务器接收到信息,返回字符集给客户
character_set_server | latin1 //默认字符集,如果库,表,字段都没有设置字符集就默认使用这个
character_set_system | utf8 //系统原数据的字符集,如表名,库名
character_sets_dir | E:\wamp\bin\mysql\mysql5.6.17\share\charsets\
mysql>show variables like "%collation%"; //校对规则
宽字节不要用set names (gbk);
因为快字节的低四位很容易就剩生成一个/
php是以字符串导入的,如果多了一个/,那他和后面的/就转义成一个/,
那么就多了一个’就生成漏洞,可以输入/* */注释password来绕过验证,
不用验证就进入管理页面,随意修改用户的信息。
解决此问题:
单独设置以下三个,把客户端字符集设置为二进制,二进制不存在转义字符,[set names(gbk)就是把一下三个都转化成gbk]
character_set_connection
character_set_results
character_set_client
数据的备份:
(设置好环境变量)
mysqldump -uroot -p (数据库名) > e:\blog.sql
mysqldump -uroot -p 数据库名 表名> 导出的文件名
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
导入数据库
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\wcnc_db.sql