mysql資料型別與字段length的介紹

2021-09-21 18:09:47 字數 3984 閱讀 9343

分析mysql資料型別的長度

mysql有幾種資料型別可以限制型別的"長度",有char(length)、varchar(length)、tinyint(length)、smallint(length)、mediumint(length)、int(length)、bigint(length)、float(length, decimals)、double(length, decimals)和decimal(length, decimals)。

然而,這些資料型別的長度,並不是都指資料的大小。具體說就是:

(1)char、varcahr的長度是指字元的長度,例如char[3]則只能放字串"123",如果插入資料"1234",則從高位擷取,變為"123"。 varcahr同理。

(2)tinyint、smallint、mediumint、int和bigint的長度,其實和資料的大小無關!length指的是顯示寬度,舉個例子:

mysql> create table test(id int(3) zerofill);

query ok, 0 rows affected (0.09 sec)

mysql> insert into test(id) values(1),(1234);

query ok, 2 rows affected (0.06 sec)

records: 2 duplicates: 0 warnings: 0

mysql> select * from test;

+------+

| id |

+------+

| 001 |

| 1234 |

+------+

2 rows in set (0.00 sec)

可以看出,id的顯示寬度為3,不足的左邊補0,資料長度超過的則原樣輸出。如果沒有zerofill,則看不出顯示寬度,沒有前導零。

(3)float、double和decimal的長度指的是全部數字(包括小數點後面的),例如decimal(4,1)指的是全部位數為4,小數點後1位,如果插入1234,則查詢的資料是999.9。過程如下

mysql> alter table test add realnum decimal(4,1);

query ok, 2 rows affected (0.03 sec)

records: 2 duplicates: 0 warnings: 0

mysql> insert into test(id,realnum) values(2,1234);

query ok, 1 row affected, 1 warning (0.05 sec)

mysql> select * from test;

+------+---------+

| id | realnum |

+------+---------+

| 001 | null |

| 1234 | null |

| 002 | 999.9 |

+------+---------+

3 rows in set (0.02 sec)

附錄 常見mysql資料型別(留作備忘)

類 型大 小

描 述cahr(length)

length位元組

定長字段,長度為0~255個字元

varchar(length)

string長度+1位元組或string長度+2位元組

變長字段,長度為0~65 535個字元

tinytext

string長度+1位元組

字串,最大長度為255個字元

text

string長度+2位元組

字串,最大長度為65 535個字元

mediumint

string長度+3位元組

字串,最大長度為16 777 215個字元

longtext

string長度+4位元組

字串,最大長度為4 294 967 295個字元

tinyint(length)

1位元組範圍:-128~127,或者0~255(無符號)

smallint(length)

2位元組範圍:-32 768~32 767,或者0~65 535(無符號)

mediumint(length)

3位元組範圍:-8 388 608~8 388 607,或者0~16 777 215(無符號)

int(length)

4位元組範圍:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(無符號)

bigint(length)

8位元組範圍:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(無符號)

float(length, decimals)

4位元組具有浮動小數點的較小的數

double(length, decimals)

8位元組具有浮動小數點的較大的數

decimal(length, decimals)

length+1位元組或length+2位元組

儲存為字串的double,允許固定的小數點

date

3位元組採用yyyy-mm-dd格式

datetime

8位元組採用yyyy-mm-dd hh:mm:ss格式

timestamp

4位元組採用yyyymmddhhmmss格式;可接受的範圍終止於2023年

time

3位元組採用hh:mm:ss格式

enum

1或2位元組

enumeration(列舉)的簡寫,這意味著每一列都可以具有多個可能的值之一

set1、2、3、4或8位元組

與enum一樣,只不過每一列都可以具有多個可能的值

參考資料:

mysql檢視表的結構的mysql語句為:

mysql檢視表結構命令,如下:

desc 表名;

show columns from 表名;

describe 表名;

show create table 表名;

use information_schema;

select * from columns where table_name='表名';

順便記下:

show databases; --顯示資料庫列表

use 資料庫名; --設定為當前工作資料庫

show tables; --顯示當前工作資料庫 下的表 列表

原有一unique索引ak_pas_name(pac_name)在表tb_webparamcounter中,

執行以下sql修改索引

alter table tb_webparamcounter drop index ak_pas_name;

alter table tb_webparamcounter add unique ak_pas_name(pc_id,pac_name);

若發現索引的邏輯不對,還需要再加乙個字段進去,執行

alter table tb_webparamcounter drop index ak_pas_name;

alter table tb_webparamcounter add unique ak_pas_name(pc_id,pac_name,pac_value);

注意:這時的pc_id,pac_name,pac_value三個字段不是foreign key

否則必需先drop foreign key,再重做上一步才行

順便提下oracle

select * from v$database;

select * from all_users;

select * from user_tables;

MySQL資料型別與字段約束

mysql資料型別 型別名稱 tinyint smallint mediumint intbigint bitfloat double decimal長度1 2348 14816 型別名稱 date time year datetime timestamp長度1 3384 說明 yyyy mm dd...

mysql 資料型別選擇 Mysql欄位型別選擇

1.欄位型別選擇 1.1盡量少的佔據儲存空間 int整形 年齡 tinyint 1個位元組 0 255之間 烏龜年齡 smallint 2個位元組 0 2的16次方 mediumint 3個位元組 0 2的24次方 int 4個位元組 0 2的32次方 bigint 8個位元組 0 2的64次方 時...

mysql欄位型別詳解 MySQL資料型別詳解

引言 mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別,如下腦圖所示 數值型別 型別大小範圍 有符號 範圍 無符號 用途 tinyint 1 位元組 128,127 0,255 小整數值 smallint 2 位...