中文存入資料庫 資料庫優化第一步 資料型別

2021-10-25 13:05:50 字數 2178 閱讀 6766

資料庫優化第一步:資料型別​links.jianshu.com

為什麼選擇合適的資料型別很重要?因為資料型別會影響儲存空間的開銷,也會影響資料的查詢效率,可以說這是你優化資料庫的第一步要做的事情。

代表的是字元,無論英文或中文 都可以儲存10個字元。

數字5並不是代表儲存的長度,int型的長度是4位元組固定的,括號裡的數字僅僅代表最小顯示的寬度。

int有符號數最小值:

-2 1 4 7 4 8 3 6 4 8總共11位

2 1 4 7 4 8 3 6 4 7總共10位

所以你懂得…… 其它的整數型別以此類推。

因為我們使用的是 innodb儲存引擎,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上,使用固定長度的char列不一定比使用可變長度varchar列簡單。

可以用上表來表示,當定義char時,不管你存入多少字元,都會占用到你定義的字元數,而用varchar時,則和你輸入的字元數有關,會多一到兩個位元組來記錄位元組長度,當資料位占用的位元組數小於255時,用1個位元組來記錄長度,資料位占用位元組數大於255時,用2個位元組來記錄長度,還有一位來記錄是否為nul值

我平時會把這篇總結當做乙個字典,每次設計資料庫時忘記了會拿出來看下。

mysql支援的資料型別主要分為3類:

使用方式:即decimal(m,d)

m的取值範圍為1~65,取0時會被設為預設值,超出範圍會報錯。

d的取值範圍為0~30,而且必須<=m,超出範圍會報錯。

所以,很顯然,當m=65,d=0時,可以取得最大和最小值。

例如: decimal(5,2)

範圍: -999.99 到 999.99

如果儲存時,整數部分超出了範圍(如上面的例子中,新增數值為1000.01),就會報錯,不允許存這樣的值。

如果儲存時,小數點部分若超出範圍,就分以下情況:

若四捨五入後,整數部分沒有超出範圍,則只警告,但能成功操作並四捨五入刪除多餘的小數字後儲存。如999.994實際被儲存為999.99。

若四捨五入後,整數部分超出範圍,則報錯,並拒絕處理。如999.995和-999.995都會報錯。

浮點數是用來表示實數的一種方法,它用 m(尾數) * b( 基數)的e(指數)次方來表示實數,相對於定點數來說,在長度一定的情況下,具有表示資料範圍大的特點,但同時也存在誤差問題。如果希望保證值比較準確,推薦使用定點數資料型別。

例如: float(7,4)

範圍: -999.9999 到 999.9999

mysql儲存值時進行四捨五入,因此如果在float(7,4)列內插入999.00009,近似結果是999.0001。

float和double中的m和d的取值預設都為0,即除了最大最小值,不限制位數。

m、d範圍:

float和double中,若m的定義分別超出7和17,則多出的有效數字部分,取值是不定的,通常數值上會發生錯誤。因為浮點數是不準確的,所以我們要避免使用「=」來判斷兩個數是否相等。

字串型別指char、varchar、binary、varbinary、blob、text、enum和set。

往期文章一覽

把「策略模式」應用到實際專案中​links.jianshu.com

造個輪子,我學到了什麼​links.jianshu.com

技術面試中的軟技能​links.jianshu.com

不同時重寫equals和hashcode又怎樣!​links.jianshu.com

中文存入資料庫亂碼問題

今天存中文路徑名到mysql資料庫中,突然出現亂碼,即中文名全是 搜尋之後,簡單改了一下 就解決了,方法如下 在更新語句 sql update experiment set path path where experiment id experimentid 中新增乙個 n 即可。結果為 sql2 ...

中文存入資料庫 MySQL 中文全文檢索(僅學習)

php 中文分詞 splitword scws 中文分詞 vicword乙個純php的分詞 在mysql 5.7.6之前,全文索引只支援英文全文索引,不支援中文全文索引,需要利用分詞器把中文段落預處理拆分成單詞,然後存入資料庫。從mysql 5.7.6開始,mysql內建了ngram全文解析器,用來...

mysql資料庫入門第一步之建立表

右鍵 新建資料庫 輸入庫名 選擇字符集和排序規則,點確定 建立資料庫成功 新建表my 表 右鍵 新建表 如上圖所示,在第乙個標籤頁 字段 中 名 欄位的名字 型別 欄位的型別,有幾十種,常用的有以下幾種 www.cppcns.com 長度 資料存的最大長度,對於不同的字段型別,長度表示的意義也不一樣...