??個人專欄:
?? 算法設(shè)計與分析:算法設(shè)計與分析_IT閆的博客-CSDN博客
??Java基礎(chǔ):Java基礎(chǔ)_IT閆的博客-CSDN博客
??c語言:c語言_IT閆的博客-CSDN博客
??MySQL:數(shù)據(jù)結(jié)構(gòu)_IT閆的博客-CSDN博客
??數(shù)據(jù)結(jié)構(gòu):??????數(shù)據(jù)結(jié)構(gòu)_IT閆的博客-CSDN博客
??C++:C++_IT閆的博客-CSDN博客
??C51單片機(jī):C51單片機(jī)(STC89C516)_IT閆的博客-CSDN博客
??基于HTML5的網(wǎng)頁設(shè)計及應(yīng)用:基于HTML5的網(wǎng)頁設(shè)計及應(yīng)用_IT閆的博客-CSDN博客??????
??python:python_IT閆的博客-CSDN博客
??離散數(shù)學(xué):離散數(shù)學(xué)_IT閆的博客-CSDN博客
歡迎收看,希望對大家有用!
目錄
??概述:
??數(shù)值型
??整數(shù)型
??小數(shù)類型
???浮點(diǎn)數(shù)
??日期時間型
??字符串類型
??mysql字符集問題
??概述:
MySQL數(shù)據(jù)類型(列類型)可歸納為數(shù)值型、時間日期型和字符型。
數(shù)值型:
整形:tinyint/smallint/mediumint/int/bigint
小數(shù)型:Float(D,M),decimal(D,M)
字符串型:
Char(M)
Varchar(M)
Text 文本類型
日期/ 時間型:
Date 日期
Time 時間
Datetime 日期時間型
TIMESTAMP??? 時間戳類型
Year 年類型
??數(shù)值型
??整數(shù)型
tinyint(1), smallint(2), mediumint(3),int(4), bigint(8)。括號中表示該類型所占空間的長度(字節(jié)數(shù))
類型 |
大小 |
范圍(有符號) |
范圍(無符號) |
用途 |
TINYINT |
1 字節(jié) |
(-128,127) |
(0,255) |
小整數(shù)值 |
SMALLINT |
2 字節(jié) |
(-32 768,32 767) |
(0,65 535) |
大整數(shù)值 |
MEDIUMINT |
3 字節(jié) |
(-8388 608,8388 607) |
(0,16777215) |
大整數(shù)值 |
INT或INTEGER |
4 字節(jié) |
(-2147483648,2147483647) |
(0,4294967295) |
大整數(shù)值 |
BIGINT |
8字節(jié) |
(-9,223,372,036,854,775,808,9223372036854775807) |
(0,18446744073709551615) |
極大整數(shù)值 |
整形系統(tǒng)的可選參數(shù): XXint(M) unsigned zerofill
例: age tinyint(4) unsigned 或者 stunum smallint(6) zerofill
Unsigned: 代表此列為無符號類型,會影響到列的存儲范圍(范圍從0 開始)
(不加unsigned, 則代表該列默認(rèn)是有符號類型,范圍從負(fù)數(shù)開始)
列可以聲明默認(rèn)值,而且推薦聲明默認(rèn)值
Not null default 0;
Zerofill :代表0 填充,即:如果該數(shù)字不足參數(shù)M位,則自動補(bǔ)0,補(bǔ)夠M位。
1. 如果沒有zerofill 屬性,單獨(dú)的參數(shù)M,沒有任何意義
2. 如果設(shè)置某列為zerofill, 則該列已經(jīng)默認(rèn)為unsigned, 無符號類型,M代表該列的顯示寬度。
??小數(shù)類型
???浮點(diǎn)數(shù)
小數(shù)型: float(M,D),decimal(M,D)
float(M,D): 浮點(diǎn)小數(shù),代表可存儲一共M位(不含小數(shù)點(diǎn)),其中,小數(shù)點(diǎn)后D位
decimal(M,D) :定點(diǎn)小樹, M,D的意義同上.
區(qū)別: decimal 比float 精度更高,適合存儲貨幣等要求精確的數(shù)字.
見下例:
??日期時間型
mysql 時間類型有,date,time,datetime,timestamp,year五種。
date類型: 支持的范圍為’1000-01-01’到’9999-12-31’
time類型: 支持的范圍是’-838:59:59’到’838:59:59’
datetime類型:支持的范圍是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’
timestamp類型:時間戳,就是表示“當(dāng)前時刻”, 用int 來存儲,是1970-01-01 00:00:00 到當(dāng)前的秒數(shù),類似函數(shù)now()獲得的值,用于INSERT或UPDATE操作時自動獲得當(dāng)前時間。
一般存注冊時間,商品發(fā)布時間等,并不是用datetime 存儲,而是用時間戳。因此datetime 雖然直觀,但計算不便。
year類型: 四位字符串,范圍為’1901’到’2155’;四位數(shù)字,范圍為1901到2155;兩位字符串,范圍為’00’到’99’;兩位整數(shù),范圍為1到99
在mysql中除了timestamp 類型允許有默認(rèn)值外,其他時間類型都不能有默認(rèn)值,不然會報錯。
mysql常用時間日期函數(shù)
獲取當(dāng)前日期和時間: now();
獲取當(dāng)前日期: curdate();
獲取當(dāng)前時間:curtime();
將具體時間轉(zhuǎn)換為時間戳:unix_timestamp();
將時間戳轉(zhuǎn)換為時間:from_unixtime();
??字符串類型
mysql提供的有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
Char 定長類型
Char(M),M 代表寬度,( 即:可容納的字符數(shù)),0<=255 之間
例: char(10), 則能輸入10 個字符.
Varchar 變長類型
varchar(M),M 代表寬度,( 即:可容納的字符數(shù)),0<=M<=65535(以ascii 字符為例, utf8 22000左右)
定長二進(jìn)制字符串binary:類似char,應(yīng)該設(shè)定長度值,只是按“二進(jìn)制字節(jié)”保存存字符數(shù)據(jù),最大255個字節(jié),無編碼問題
變長二進(jìn)制字符串varbinary:類似varchar,需要設(shè)定長度值,只是按“二進(jìn)制字節(jié)”存字符數(shù)據(jù),最大65532個字節(jié),無編碼問題
文本列類型text:用于存儲普通文本,不受行的最大長度的限制,同類還有:tinytext, mediuntext, longtext
二進(jìn)制列類型blob:用于存儲二進(jìn)制字節(jié)內(nèi)容,不受行的最大長度的限制,同類的還有:tinyblob, mediumblob, longblob
枚舉類型enum: 類似單選項(xiàng)應(yīng)用中的多個選項(xiàng)值,最大65535個選項(xiàng)值;使用形式:enum(‘value1’, ‘value2’, … );存儲數(shù)據(jù)的時候其實(shí)存的是一個對應(yīng)的數(shù)字序號(從1開始)
set類型:類似多選項(xiàng)應(yīng)用中的多個選項(xiàng),最多64個選項(xiàng),使用形式:set(‘value1’, ‘value2’, …); 內(nèi)部存儲的也是數(shù)字(依次為1,2,4,8, ….),但可以是多個值,比如5就表示2個值(1,4),14就表示3個值(2,4,8)
Char(M) 如何占據(jù)M個字符寬度?
答:如果實(shí)際存儲內(nèi)容不足M個,則后面加空格補(bǔ)齊
取出來的時候,再把后表面的空格去掉. (所以如果內(nèi)容最后有空格,將會被清除)速度上:定長速度快些。
Char 與varchar 相關(guān)實(shí)驗(yàn)
Concat 連接的意思
SET 和 enum
create table seTest(
id int auto_increment,
hobby set('籃球','足球','羽毛球','乒乓球','棒球'),
gender enum('male','female','not know'),
primary key(id)
)engine = myisam default charset = utf8;
insert into seTest(hobby,gender) values('籃球','male'),('籃球,足球,棒球','not know');
insert into seTest(hobby,gender) values('籃球','male,female');
insert into seTest(hobby,gender) values('籃球','male female');
insert into seTest(hobby,gender) values('排球','male female');
mysql> show warnings;
mysql> select * from setest;
可以看到,當(dāng)插入的值跟set 、enum 字段值要求不符時,會插入空值。
常用字符串函數(shù)
concat(column|str1,column | str2,….)將多個字符串首尾相連后返回。
concat_ws(separator,str1,str2,….)將多個字符串指定連接符separator的首尾相連后返回
substr(str,pos[,len]) 從字符串中的指定位置pos開始取一個字串返回
repeat(str,count) 將字符串str重復(fù)count次后返回
reverse(str) 將字符串str反轉(zhuǎn)后返回
??mysql字符集問題
Mysql 的字符集設(shè)置非常靈活
可以設(shè)置服務(wù)器默認(rèn)字符集
數(shù)據(jù)庫默認(rèn)字符集
表默認(rèn)字符集
列字符集
(如果某一個級別沒有指定字符集,則繼承上一級)
set names gbk
set names utf8
執(zhí)行show variables like 'character%',獲取字符集配置為:
由于CMD命令行只支持系統(tǒng)當(dāng)前編碼,所以一般需要將CMD與MYSQL服務(wù)器的交互編碼設(shè)置為gbk才能正常顯示utf8的數(shù)據(jù)。
character_set_client、character_set_connection和character_set_results變成了utf8,可以看出set names就是設(shè)置這三個參數(shù)的值。一個select執(zhí)行的過程應(yīng)該是:client——>connection——>server/database——>results——>connection——>client,任何一個環(huán)節(jié)的字符集不兼容都會出現(xiàn)亂碼。
1、用戶通過mysql.exe來操作mysqld.exe
2、真正的SQL執(zhí)行是mysqld.exe來執(zhí)行
3、mysql.exe將數(shù)據(jù)傳入mysqld.exe的時候,沒有告知其對應(yīng)的符號規(guī)則(字符集),而mysqld也沒有能力自己判斷,就會使用自己默認(rèn)的(字符集);
解決方案:
mysql.exe如果告知mysqld.exe對應(yīng)的字符集類型為GBK
深層原理:
客戶端、服務(wù)器、連接層
客戶端傳入數(shù)據(jù)給服務(wù)器:client
服務(wù)器返回數(shù)據(jù)給客戶端:server
客戶端與服務(wù)器端之間的連接:connection文章來源:http://www.zghlxwxcb.cn/news/detail-769632.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-769632.html
到了這里,關(guān)于【MySQL】——數(shù)據(jù)類型及字符集的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!