1. 程式人生 > >[轉]分析MySQL數據類型的長度【mysql數據字段 中length和decimals的作用!熟悉mysql必看】

[轉]分析MySQL數據類型的長度【mysql數據字段 中length和decimals的作用!熟悉mysql必看】

一個 不足 rop asp 接受 enum webp 0 rows varchar

你看到的這個文章來自於http://www.cnblogs.com/ayanmw

轉載自:http://blog.csdn.net/daydreamingboy/article/details/6310907

分析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格式;可接受的範圍終止於2037年

TIME

3字節

采用HH:MM:SS格式

ENUM

1或2字節

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

SET

1、2、3、4或8字節

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

參考資料:http://blog.csdn.net/reanimation1/archive/2008/08/26/2833327.aspx

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;
技術分享圖片

轉載請註明出處:http://www.cnblogs.com/ayanmw 我會很高興的!

[轉]分析MySQL數據類型的長度【mysql數據字段 中length和decimals的作用!熟悉mysql必看】