mysql的varchar(N)和int(N)的含義及其與char區別
Varchar儲存可變長字串,小於255位元組時需要1個額外位元組(大於255需要2個額外位元組)儲存長度,最大長度為65532位元組(所有列總和);
char儲存定長(right padding),讀取時會截斷末尾空格,長度最大為255字元;
2)varchar(30)中30的涵義
最大儲存30個字元;varchar(5)和(200)儲存hello所佔空間一樣,但後者在排序時會消耗更多記憶體,因為order by col採用fixed_length計算col長度(memory引擎也一樣)
Data Type |
Storage Required |
CHAR(M) |
M × w bytes, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set. SeeSection 14.5.13.6, “Physical Row Structure” for information about CHARdata type storage requirements for InnoDB tables. |
BINARY(M) |
M bytes, 0 <= M <= 255 |
VARCHAR(M), VARBINARY(M) |
L + 1 bytes if column values require 0 – 255 bytes, L + 2 bytes if values may require more than 255 bytes |
For example, a VARCHAR(255) column can hold a string with a maximum length of 255 characters(字元而非位元組). 對於latin1,’abcd’的L為4,儲存需要5個位元組;對於ucs2(雙位元組字元),則需要10個位元組儲存(最大長度為510>255,故需要額外2個位元組)
3)int(20)中20的涵義
20表示最大顯示寬度為20,但仍佔4位元組儲存,儲存範圍不變;
create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));
create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));
select * from int_test;
+------------+
| a |
+------------+
| 0000000001 |
| 0000000002 |
| 0000000003 |
| 2147483648 |
+------------+
select * from int_test_4;
+------------+
| a |
+------------+
| 0001 |
| 0002 |
| 0003 |
| 2147483648 |
+------------+
4)為什麼MySQL這樣設計?
對大多數應用沒有意義,只是規定一些工具用來顯示字元的個數;int(1)和int(20)儲存和計算均一樣;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1330966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- char(n)和varchar2(n)區別
- MySQL中資料型別(char(n)、varchar(n)、nchar(n)、nvarchar(n)的區別)MySql資料型別
- VARCHAR2(N CHAR)與VARCHAR2(N)的區別[Oracle基礎]Oracle
- MySQL中CHAR和VARCHAR區別MySql
- varchar和char的區別
- Mysql中varchar與char的區別以及varchar(30)中的30代表的涵義MySql
- char ,varchar2和varchar的區別
- MySQL 中 VARCHAR 最大長度及 CHAR 和 VARCHAR 的區別MySql
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- MYSQL INNODB主鍵使用varchar和int的區別MySql
- MySQL中int、char、varchar的效能淺談MySql
- char和varchar2的區別
- 談MySQL中char varchar區別MySql
- mysql中int、bigint、smallint 和 tinyint的區別與長度的含義MySql
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- 【MySQL】淺談varchar(N)MySql
- 【MySQL】淺談 varchar(N)MySql
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- oracle中char與varchar2的區別Oracle
- Sql server char,nchar,varchar與Nvarchar的區別SQLServer
- NTMySQL中varchar和char型別的區別heeMySql型別
- char,nchar,varchar,nvarchar的區別和特點
- 【基礎】Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- 面試官:MySQL 中 varchar(n) 中 n 最大取值為多少?面試MySql
- MySQL CHAR和VARCHAR資料型別介紹MySql資料型別
- Mysql中 int(10)和int(11)的區別MySql
- extern int a 和int a的區別
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- char str[]和char *str的區別
- se16與se16n的區別
- FIRST_ROWS和FIRST_ROWS_n的區別
- MySQL中varchar和char定義長度是字元,與Oracle nvarchar2類似MySql字元Oracle
- int與Integer的區別
- 360N7對比N6 Pro的區別對比 60N7和360N6 Pro哪個好?
- int和Integer的區別
- eventlet 的 spawn_n 和 spawn 有什麼區別?
- FIRST_ROWS和FIRST_ROWS(N)的區別 (zt)