二進制
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