日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
mysql怎么設(shè)置長度 mysql怎么修改字段長度

mysql表字段長度調(diào)整注意事項

mysql創(chuàng)建表字段長度范圍_Mysql的建表規(guī)范與注意事項?、 表設(shè)計規(guī)范

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了天山免費建站歡迎大家使用!

庫名、表名、字段名必須使??寫字母,“_”分割。

庫名、表名、字段名必須不超過12個字符。

庫名、表名、字段名見名知意,建議使?名詞?不是動詞。

建議使?InnoDB存儲引擎。

存儲精確浮點數(shù)必須使?DECIMAL替代FLOAT和DOUBLE。

建議使?UNSIGNED存儲?負數(shù)值。

建議使?INT UNSIGNED存儲IPV4。

整形定義中不添加長度,?如使?INT,?不是INT(4)。

使?短數(shù)據(jù)類型,?如取值范圍為0-80時,使?TINYINT UNSIGNED。

不建議使?ENUM類型,使?TINYINT來代替。

盡可能不使?TEXT、BLOB類型。

VARCHAR(N),N表?的是字符數(shù)不是字節(jié)數(shù),?如VARCHAR(255),可以最?可存儲255個漢字,需要根據(jù)實際的寬度來選擇N。

VARCHAR(N),N盡可能?,因為MySQL?個表中所有的VARCHAR字段最?長度是65535個字節(jié),進?排序和創(chuàng)建臨時表?類的內(nèi)存操作時,會使?N的長度申請內(nèi)存。

表字符集選擇UTF8。

使?VARBINARY存儲變長字符串。

存儲年使?YEAR類型。

存儲?期使?DATE類型。

存儲時間(精確到秒)建議使?TIMESTAMP類型,因為TIMESTAMP使?4字節(jié),DATETIME使?8個字節(jié)。

建議字段定義為NOT NULL。

將過?字段拆分到其他表中。

禁?在數(shù)據(jù)庫中使?VARBINARY、BLOB存儲圖?、?件等。

表結(jié)構(gòu)變更需要通知DBA審核。

?、 索引規(guī)范

?唯?索引必須按照“idx_字段名稱_字段名稱[_字段名]”進?命名。

唯?索引必須按照“uniq_字段名稱_字段名稱[_字段名]”進?命名。

索引名稱必須使??寫。

索引中的字段數(shù)建議不超過5個。

單張表的索引數(shù)量控制在5個以內(nèi)。

唯?鍵由3個以下字段組成,并且字段都是整形時,使?唯?鍵作為主鍵。

沒有唯?鍵或者唯?鍵不符合5中的條件時,使??增(或者通過發(fā)號器獲取)id作為主鍵。

唯?鍵不和主鍵重復(fù)。

索引字段的順序需要考慮字段值去重之后的個數(shù),個數(shù)多的放在前?。

ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后?。

使?EXPLAIN判斷SQL語句是否合理使?索引,盡量避免extra列出現(xiàn):Using File Sort,UsingTemporary。

UPDATE、DELETE語句需要根據(jù)WHERE條件添加索引。

不建議使?%前綴模糊查詢,例如LIKE “%weibo”。

對長度過長的VARCHAR字段建?索引時,添加crc32或者MD5 Hash字段,對Hash字段建?索引。

合理創(chuàng)建聯(lián)合索引(避免冗余),(a,b,c) 相當于 (a) 、(a,b) 、(a,b,c)。

合理利?覆蓋索引。

SQL變更需要確認索引是否需要變更并通知DBA。

三、 SQL語句規(guī)范

使?prepared statement,可以提供性能并且避免SQL注?。

SQL語句中IN包含的值不應(yīng)過多。

UPDATE、DELETE語句不使?LIMIT。

WHERE條件中必須使?合適的類型,避免MySQL進?隱式類型轉(zhuǎn)化。

SELECT語句只獲取需要的字段。

SELECT、INSERT語句必須顯式的指明字段名稱,不使?SELECT *,不使?INSERTINTO table()。

使 ?SELECT column_name1, column_name2 FROM table WHERE[condition]?不是SELECT column_name1 FROM table WHERE[condition]和SELECT column_name2 FROM table WHERE [condition]。

WHERE條件中的?等值條件(IN、BETWEEN、、=)會導(dǎo)致后?的條件使?不了索引。

避免在SQL語句進?數(shù)學(xué)運算或者函數(shù)運算,容易將業(yè)務(wù)邏輯和DB耦合在?起。

INSERT語句使?batch提交(INSERT INTO tableVALUES(),(),()……),values的個數(shù)不應(yīng)過多。

避免使?存儲過程、觸發(fā)器、函數(shù)等,容易將業(yè)務(wù)邏輯和DB耦合在?起,并且MySQL的存儲過程、觸發(fā)器、函數(shù)中存在?定的bug。

避免使?JOIN。

使?合理的SQL語句減少與數(shù)據(jù)庫的交互次數(shù)。

不使?ORDER BY RAND(),使?其他?法替換。

建議使?合理的分頁?式以提?分頁的效率。

統(tǒng)計表中記錄數(shù)時使?COUNT(*),?不是COUNT(primary_key)和COUNT(1)。

禁?在從庫上執(zhí)?后臺管理和統(tǒng)計類型功能的QUERY。

四、 散表規(guī)范

每張表數(shù)據(jù)量建議控制在5000w以下。

可以結(jié)合使?hash、range、lookup table進?散表。

散表如果使?md5(或者類似的hash算法)進?散表,表名后綴使?16進制,?如user_ff。

推薦使?CRC32求余(或者類似的算術(shù)算法)進?散表,表名后綴使?數(shù)字,數(shù)字必須從0開始并等寬,?如散100張表,后綴從00-99。

使?時間散表,表名后綴必須使?特定格式,?如按?散表user_20110209、按?散表user_201102。

五、 其他

批量導(dǎo)?、導(dǎo)出數(shù)據(jù)需要DBA進?審查,并在執(zhí)?過程中觀察服務(wù)。

批量更新數(shù)據(jù),如update,delete 操作,需要DBA進?審查,并在執(zhí)?過程中觀察服務(wù)。

產(chǎn)品出現(xiàn)?數(shù)據(jù)庫平臺運維導(dǎo)致的問題和故障時,如前端被抓站,請及時通知DBA,便于維護服務(wù)穩(wěn)定。

業(yè)務(wù)部門程序出現(xiàn)bug等影響數(shù)據(jù)庫服務(wù)的問題,請及時通知DBA,便于維護服務(wù)穩(wěn)定。

業(yè)務(wù)部門推?活動,請?zhí)崆巴ㄖ狣BA進?服務(wù)和訪問評估。

如果出現(xiàn)業(yè)務(wù)部門?為誤操作導(dǎo)致數(shù)據(jù)丟失,需要恢復(fù)數(shù)據(jù),請在第?時間通知DBA,并提供準確時間,誤操作語句等重要線索。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

FAQ

1-1.庫名、表名、字段名必須使??寫字母,“_”分割。

a)MySQL有配置參數(shù)lower_case_table_names,不可動態(tài)更改,Linux系統(tǒng)默認為0,即庫表名以實際情況存儲,??寫敏感。如果是1,以?寫存儲,??寫不敏感。如果是2,以實際情況存儲,但以?寫?較。

b) 如果??寫混合?,可能存在abc,Abc,ABC等多個表共存,容易導(dǎo)致混亂。

c) 字段名顯?區(qū)分??寫,但實際使?不區(qū)分,即不可以建?兩個名字?樣但??寫不?樣的字段。

d) 為了統(tǒng)?規(guī)范, 庫名、表名、字段名使??寫字母。

1-2.庫名、表名、字段名必須不超過12個字符。

庫名、表名、字段名?持最多64個字符,但為了統(tǒng)?規(guī)范、易于辨識以及減少傳輸量,必須不超過12字符。

1-3.庫名、表名、字段名見名知意,建議使?名詞?不是動詞。

a) ?戶評論可?表名usercomment或者comment。

b) 庫表是?種客觀存在的事物,?種對象,所以建議使?名詞。

1-4.建議使?InnoDB存儲引擎。

a) 5.5以后的默認引擘,?持事務(wù),?級鎖,更好的恢復(fù)性,?并發(fā)下性能更好,對多核,?內(nèi)存,ssd等硬件?持更好。

b) 具體?較可見附件的官???書。

1-5.存儲精確浮點數(shù)必須使?DECIMAL替代FLOAT和DOUBLE。

a) mysql中的數(shù)值類型(不包括整型):

IEEE754浮點數(shù):float (單精度) , double 或real (雙精度)

定點數(shù): decimal或 numeric

單精度浮點數(shù)的有效數(shù)字?進制是24位,按?進制來說,是8位;雙精度浮點數(shù)的有效數(shù)字?進制是53位,按?進制來說,是16 位

?個實數(shù)的有效數(shù)字超過8位,?單精度浮點數(shù)來表?的話,就會產(chǎn)?誤差!同樣,如果?個實數(shù)的有效數(shù)字超過16位,?雙精度浮點數(shù)來表?,也會產(chǎn)?誤差

b)IEEE754標準的計算機浮點數(shù),在內(nèi)部是??進制表?的,但在將?個?進制數(shù)轉(zhuǎn)換為?進制浮點數(shù)時,也會造成誤差,原因是不是所有的數(shù)都能轉(zhuǎn)換成有限長度的?進制數(shù)。

即?個?進制可以準確轉(zhuǎn)換成?進制,但?個帶?數(shù)的?進制不?定能夠準確地??進制來表?。

實例:

drop table if exists t;

create table t(value float(10,2));

insert into t values(131072.67),(131072.68);

select value from t;

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

|value |

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

| 131072.67 |

| 131072.69 |

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

1-6.建議使?UNSIGNED存儲?負數(shù)值。

同樣的字節(jié)數(shù),存儲的數(shù)值范圍更?。如tinyint 有符號為 -128-127,?符號為0-255

1-7. 如何使?INT UNSIGNED存儲ip?

使?INTUNSIGNED?不是char(15)來存儲ipv4地址,通過MySQL函數(shù)inet_ntoa和inet_aton來進?轉(zhuǎn)化。Ipv6地址?前沒有轉(zhuǎn)化函數(shù),需要使?DECIMAL或者兩個bigINT來存儲。例如:

SELECT INET_ATON('209.207.224.40');

3520061480

SELECT INET_NTOA(3520061480);

209.207.224.40

1-8. INT[M],M值代表什么含義?

注意數(shù)值類型括號后?的數(shù)字只是表?寬度?跟存儲范圍沒有關(guān)系,?如INT(3)默認顯?3位,空格補齊,超出時正常顯?,Python、Java客戶端等不具備這個功能。

1-10.不建議使?ENUM、SET類型,使?TINYINT來代替。

a)ENUM,有三個問題:添加新的值要做DDL,默認值問題(將?個?法值插?ENUM(也就是說,允許的值列之外的字符串),將插?空字符串以作為特殊錯誤值),索引值問題(插?數(shù)字實際是插?索引對應(yīng)的值)

實例:

drop table if exists t;

create table t(sex enum('0','1'));

insert into t values(1);

insert into t values('3');

select * from t;

+------+

| sex |

+------+

| 0 |

| |

+------+

2 rows in set (0.00 sec)

1-11.盡可能不使?TEXT、BLOB類型。

a) 索引排序問題,只能使?max_sort_length的長度或者??指定ORDER BY SUBSTRING(column,length)的長度來排序

b) Memory引擘不?持text,blog類型,會在磁盤上?成臨時表

c) 可能浪費更多的空間

d) 可能?法使?adaptive hash index

e) 導(dǎo)致使?where沒有索引的語句變慢

1-13. VARCHAR中會產(chǎn)?額外存儲嗎?

VARCHAR(M),如果M256時會使??個字節(jié)來存儲長度,如果M=256則使?兩個字節(jié)來存儲長度。

1-14.表字符集選擇UTF8。

a) 使?utf8字符集,如果是漢字,占3個字節(jié),但ASCII碼字符還是1個字節(jié)。

b) 統(tǒng)?,不會有轉(zhuǎn)換產(chǎn)?亂碼風險

c) 其他地區(qū)的?戶(美國、印度、臺灣)?需安裝簡體中??持,就能正??茨?字,并且不會出現(xiàn)亂碼

d)ISO-8859-1編碼(latin1)使?了單字節(jié)內(nèi)的所有空間,在?持ISO-8859-1的系統(tǒng)中傳輸和存儲其他任何編碼的字節(jié)流都不會被拋棄。即把其他任何編碼的字節(jié)流當作ISO-8859-1編碼看待都沒有問題,保存的是原封不動的字節(jié)流。

1-15.使?VARBINARY存儲變長字符串。

?進制字節(jié)流,不存在編碼問題

1-18. 為什么建議使?TIMESTAMP來存儲時間?不是DATETIME?

DATETIME和TIMESTAMP都是精確到秒,優(yōu)先選擇TIMESTAMP,因為TIMESTAMP只有4個字節(jié),?DATETIME8個字節(jié)。同時TIMESTAMP具有?動賦值以及?動更新的特性。

如何使?TIMESTAMP的?動賦值屬性?

a) 將當前時間作為ts的默認值:ts TIMESTAMP DEFAULTCURRENT_TIMESTAMP。

b) 當?更新時,更新ts的值:ts TIMESTAMP DEFAULT 0 ONUPDATE CURRENT_TIMESTAMP。

c) 可以將1和2結(jié)合起來:ts TIMESTAMP DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

1-19.建議字段定義為NOT NULL。

a)如果null字段被索引,需要額外的1字節(jié)

b)使索引,索引統(tǒng)計,值的?較變得更復(fù)雜

c)可?0,''代替

d)如果是索引字段,?定要定義為not null

1-21.禁?在數(shù)據(jù)庫中使?VARBINARY、BLOB存儲圖?、?件等。

采?分布式?件系統(tǒng)更?效

2. 為什么MySQL的性能依賴于索引?

MySQL的查詢速度依賴良好的索引設(shè)計,因此索引對于?性能?關(guān)重要。合理的索引會加快查詢速度(包括UPDATE和DELETE的速

度,MySQL會將包含該?的page加載到內(nèi)存中,然后進?UPDATE或者DELETE操作),不合理的索引會降低速度。

MySQL索引查找類似于新華字典的拼?和部?查找,當拼?和部?索引不存在時,只能通過?頁?頁的翻頁來查找。當MySQL查詢不能使?索引時,MySQL會進?全表掃描,會消耗?量的IO。

2-5. 為什么?張表中不能存在過多的索引?

InnoDB的secondaryindex使?b+tree來存儲,因此在UPDATE、DELETE、INSERT的時候需要對b+tree進?調(diào)整,過多的索引會減慢更新的速度。

2-11. EXPLAIN語句

EXPLAIN語句(在MySQL客戶端中執(zhí)?)可以獲得MySQL如何執(zhí)?SELECT語句的信息。通過對SELECT語句執(zhí)?EXPLAIN,可以知曉MySQL執(zhí)?該SELECT語句時是否使?了索引、全表掃描、臨時表、排序等信息。盡量避免MySQL進?全表掃描、使?臨時表、排序等。詳見官??檔。

2-13.不建議使?%前綴模糊查詢,例如LIKE “%weibo”。

會導(dǎo)致全表掃描

2-14. 如何對長度?于50的VARCHAR字段建?索引?

下?的表增加?列url_crc32,然后對url_crc32建?索引,減少索引字段的長度,提?效率。

CREATE TABLE url(

……

url VARCHAR(255) NOT NULL DEFAULT 0,

url_crc32INT UNSIGNED NOT NULL DEFAULT 0,

……

index idx_url(url_crc32)

);

2-16. 什么是覆蓋索引?

InnoDB 存儲引擎中,secondaryindex(?主鍵索引)中沒有直接存儲?地址,存儲主鍵值。如果?戶需要查詢secondaryindex中所不包含的數(shù)據(jù)列時,需要先通過secondaryindex查找到主鍵值,然后再通過主鍵查詢到其他數(shù)據(jù)列,因此需要查詢兩次。

覆蓋索引的概念就是查詢可以通過在?個索引中完成,覆蓋索引效率會?較?,主鍵查詢是天然的覆蓋索引。

合理的創(chuàng)建索引以及合理的使?查詢語句,當使?到覆蓋索引時可以獲得性能提升。

?如SELECT email,uid FROM user_email WHEREuid=xx,如果uid不是主鍵,適當時候可以將索引添加為index(uid,email),以獲得性能提升。

3-3.UPDATE、DELETE語句不使?LIMIT。

a) 可能導(dǎo)致主從數(shù)據(jù)不?致

b) 會記錄到錯誤?志,導(dǎo)致?志占??量空間

3-4. 為什么需要避免MySQL進?隱式類型轉(zhuǎn)化?

因為MySQL進?隱式類型轉(zhuǎn)化之后,可能會將索引字段類型轉(zhuǎn)化成=號右邊值的類型,導(dǎo)致使?不到索引,原因和避免在索引字段中使?函數(shù)是類似的。

3-6. 為什么不建議使?SELECT *?

增加很多不必要的消耗(cpu、io、內(nèi)存、?絡(luò)帶寬);增加了使?覆蓋索引的可能性;當表結(jié)構(gòu)發(fā)?改變時,前段也需要更新。

3-13. 如何減少與數(shù)據(jù)庫的交互次數(shù)?

使?下?的語句來減少和db的交互次數(shù):

INSERT ... ON DUPLICATE KEY UPDATE

REPLACE

INSERT IGNORE

INSERT INTO values(),()如何結(jié)合使?多個緯度進?散表散庫?

例如微博message,先按照crc32(message_id)將message散到16個庫中,然后針對每個庫中的表,?天?成?張新表。

3-14. 為什么不能使?ORDER BY rand()?

因為ORDER BYrand()會將數(shù)據(jù)從磁盤中讀取,進?排序,會消耗?量的IO和CPU,可以在程序中獲取?個rand值,然后通過在從數(shù)據(jù)庫中獲取對應(yīng)的值。

3-15. MySQL中如何進?分頁?

假如有類似下?分頁語句:

SELECT * FROM table ORDER BY TIME DESC LIMIT 10000,10;

這種分頁?式會導(dǎo)致?量的io,因為MySQL使?的是提前讀取策略。

推薦分頁?式:

SELECT * FROM table WHERE TIME

SELECT * FROM tableinner JOIN(SELECT id FROM table ORDER BY TIME LIMIT 10000,10) as t USING(id)

3-17.為什么避免使?復(fù)雜的SQL?

拒絕使?復(fù)雜的SQL,將?的SQL拆分成多條簡單SQL分步執(zhí)?。原因:簡單的SQL容易使?到MySQL的querycache;減少鎖表時間特別是MyISAM;可以使?多核cpu。

2. InnoDB存儲引擎為什么避免使?COUNT(*)?

InnoDB表避免使?COUNT(*)操作,計數(shù)統(tǒng)計實時要求較強可以使?memcache或者Redis,?實時統(tǒng)計可以使?單獨統(tǒng)計表,定時更新。

5

百度文庫VIP限時優(yōu)惠現(xiàn)在開通,立享6億+VIP內(nèi)容

立即獲取

mysql創(chuàng)建表字段長度范圍_Mysql的建表規(guī)范與注意事項

mysql創(chuàng)建表字段長度范圍_Mysql的建表規(guī)范與注意事項?、 表設(shè)計規(guī)范

庫名、表名、字段名必須使??寫字母,“_”分割。

庫名、表名、字段名必須不超過12個字符。

庫名、表名、字段名見名知意,建議使?名詞?不是動詞。

建議使?InnoDB存儲引擎。

存儲精確浮點數(shù)必須使?DECIMAL替代FLOAT和DOUBLE。

建議使?UNSIGNED存儲?負數(shù)值。

建議使?INT UNSIGNED存儲IPV4。

第 1 頁

整形定義中不添加長度,?如使?INT,?不是INT(4)。

使?短數(shù)據(jù)類型,?如取值范圍為0-80時,使?TINYINT UNSIGNED。

不建議使?ENUM類型,使?TINYINT來代替。

盡可能不使?TEXT、BLOB類型。

VARCHAR(N),N表?的是字符數(shù)不是字節(jié)數(shù),?如VARCHAR(255),可以最?可存儲255個漢字,需要根據(jù)實際的寬度來選擇N。

VARCHAR(N),N盡可能?,因為MySQL?個表中所有的VARCHAR字段最?長度是65535個字節(jié),進?排序和創(chuàng)建臨時表?類的內(nèi)存操作時,會使?N的長度申請內(nèi)存。

第 2 頁

表字符集選擇UTF8。

使?VARBINARY存儲變長字符串。

存儲年使?YEAR類型。

存儲?期使?DATE類型。

存儲時間(精確到秒)建議使?TIMESTAMP類型,因為TIMESTAMP使?4字節(jié),DATETIME使?8個字節(jié)。

建議字段定義為NOT NULL。

將過?字段拆分到其他表中。

禁?在數(shù)據(jù)庫中使?VARBINARY、BLOB存儲圖?、?件等。

表結(jié)構(gòu)變更需要通知DBA審核。

第 3 頁

?、 索引規(guī)范

?唯?索引必須按照“idx_字段名稱_字段名稱[_字段名]”進?命名。

唯?索引必須按照“uniq_字段名稱_字段名稱[_字段名]”進?命名。

索引名稱必須使??寫。

索引中的字段數(shù)建議不超過5個。

單張表的索引數(shù)量控制在5個以內(nèi)。

唯?鍵由3個以下字段組成,并且字段都是整形時,使?唯?鍵作為主鍵。

沒有唯?鍵或者唯?鍵不符合5中的條件時,使??增(或者通過發(fā)號器獲取)id作為主鍵。

第 4 頁

唯?鍵不和主鍵重復(fù)。

索引字段的順序需要考慮字段值去重之后的個數(shù),個數(shù)多的放在前?。

ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后?。

使?EXPLAIN判斷SQL語句是否合理使?索引,盡量避免extra列出現(xiàn):Using File Sort,UsingTemporary。

UPDATE、DELETE語句需要根據(jù)WHERE條件添加索引。

不建議使?%前綴模糊查詢,例如LIKE “%weibo”。

對長度過長的VARCHAR字段建?索引時,添加crc32或者MD5 Hash字段,對Hash字段建?索引。

mysql快速修改字段長度

直接寫alter table語句修改字段類型及長度,或者在數(shù)據(jù)庫連接客戶端右鍵修改表來設(shè)置字段長度。

mysql varchar 怎么設(shè)置最大長度

MySQL 數(shù)據(jù)庫的varchar類型在4.1以下的版本中的最大長度限制為255,其數(shù)據(jù)范圍可以是0~255或1~255(根據(jù)不同版本數(shù)據(jù)庫來定)。在 MySQL5.0以上的版本中,varchar數(shù)據(jù)類型的長度支持到了65535,也就是說可以存放65532個字節(jié)的數(shù)據(jù),起始位和結(jié)束位占去了3個字 節(jié),也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數(shù)據(jù)可以使用可變長的varchar來存放,這樣就能有效的減少數(shù)據(jù)庫文 件的大小。

MySQL 數(shù)據(jù)庫的varchar類型在4.1以下的版本中,nvarchar(存儲的是Unicode數(shù)據(jù)類型的字符)不管是一個字符還是一個漢字,都存為2個字節(jié) ,一般用作中文或者其他語言輸入,這樣不容易亂碼 ;varchar: 漢字是2個字節(jié),其他字符存為1個字節(jié) ,varchar適合輸入英文和數(shù)字。

4.0版本以下,varchar(20),指的是20字節(jié),如果存放UTF8漢字時,只能存6個(每個漢字3字節(jié)) ;5.0版本以上,varchar(20),指的是20字符,無論存放的是數(shù)字、字母還是UTF8漢字(每個漢字3字節(jié)),都可以存放20個,最大大小是65532字節(jié) ;varchar(20)在Mysql4中最大也不過是20個字節(jié),但是Mysql5根據(jù)編碼不同,存儲大小也不同,具體有以下規(guī)則:

a) 存儲限制

varchar 字段是將實際內(nèi)容單獨存儲在聚簇索引之外,內(nèi)容開頭用1到2個字節(jié)表示實際長度(長度超過255時需要2個字節(jié)),因此最大長度不能超過65535。

b) 編碼長度限制

字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;

字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。

若定義的時候超過上述限制,則varchar字段會被強行轉(zhuǎn)為text類型,并產(chǎn)生warning。

c) 行長度限制

導(dǎo)致實際應(yīng)用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

---------------------------------------------------------------------

mysql的vachar字段的類型雖然最大長度是65535,但是并不是能存這么多數(shù)據(jù),最大可以到65533(不允許非空字段的時候),當允許非空字段的時候只能到65532。

Navicat for MySql怎么設(shè)置double和float型的小數(shù)長度?

設(shè)置方法:

1、安裝好Mysql后 下載navicat類似管理工具。

2、根據(jù)所需連接Mysql,新建數(shù)據(jù)庫、表,根據(jù)字段設(shè)置長度。

3、完成后保存數(shù)據(jù)? 具體操作圖片如下 最總得出結(jié)論有長度,小數(shù)點設(shè)置所以可以設(shè)置類型長度。

Navicat是一套快速、可靠并價格相宜的數(shù)據(jù)庫管理工具,專為簡化數(shù)據(jù)庫的管理及降低系統(tǒng)管理成本而設(shè)。它的設(shè)計符合數(shù)據(jù)庫管理員、開發(fā)人員及中小企業(yè)的需要。Navicat 是以直覺化的圖形用戶界面而建的,讓你可以以安全并且簡單的方式創(chuàng)建、組織、訪問并共用信息。

1、數(shù)據(jù)庫一般decimal用的比較多 ,double和float沒用過。其實小數(shù)長度是看業(yè)務(wù)需求的,精度需求。

2、小數(shù)長度是看業(yè)務(wù)需求的。比如拿價格來說,現(xiàn)在少數(shù)超市商品有分的,一般都是到角,所以說精度比分小一級就好了,滿足了需求,又可以防止以后需求變動。

mysql能設(shè)置數(shù)據(jù)類型長度嗎

可以設(shè)置數(shù)據(jù)類型長度

精確數(shù)字

整數(shù)

bigint

從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字)。

int

從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。

smallint

從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整數(shù)數(shù)據(jù)。

tinyint

從 0 到 255 的整數(shù)數(shù)據(jù)。

bit

bit

1 或 0 的整數(shù)數(shù)據(jù)。

decimal 和 numeric

decimal

從 -10^38 +1 到 10^38 –1 的固定精度和小數(shù)位的數(shù)字數(shù)據(jù)。

numeric

功能上等同于 decimal。

money 和 smallmoney

money

貨幣數(shù)據(jù)值介于 -2^63 (-922,337,203,685,477.5808) 與 2^63 - 1 (+922,337,203,685,477.5807) 之間,精確到貨幣單位的千分之十。

smallmoney

貨幣數(shù)據(jù)值介于 -214,748.3648 與 +214,748.3647 之間,精確到貨幣單位的千分之十。

近似數(shù)字

float

從 -1.79E + 308 到 1.79E + 308 的浮點精度數(shù)字。

real

從 -3.40E + 38 到 3.40E + 38 的浮點精度數(shù)字。

datetime 和 smalldatetime

datetime

從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數(shù)據(jù),精確到百分之三秒(或 3.33 毫秒)。

smalldatetime

從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數(shù)據(jù),精確到分鐘。

字符串

char

固定長度的非 Unicode 字符數(shù)據(jù),最大長度為 8,000 個字符。

varchar

可變長度的非 Unicode 數(shù)據(jù),最長為 8,000 個字符。

text

可變長度的非 Unicode 數(shù)據(jù),最大長度為 2^31 - 1 (2,147,483,647) 個字符。

Unicode 字符串

nchar

固定長度的 Unicode 數(shù)據(jù),最大長度為 4,000 個字符。

nvarchar

可變長度 Unicode 數(shù)據(jù),其最大長度為 4,000 字符。sysname 是系統(tǒng)提供用戶定義的數(shù)據(jù)類型,在功能上等同于 nvarchar(128),用于引用數(shù)據(jù)庫對象名。

ntext

可變長度 Unicode 數(shù)據(jù),其最大長度為 2^30 - 1 (1,073,741,823) 個字符。

二進制字符串

binary

固定長度的二進制數(shù)據(jù),其最大長度為 8,000 個字節(jié)。

varbinary

可變長度的二進制數(shù)據(jù),其最大長度為 8,000 個字節(jié)。

image

可變長度的二進制數(shù)據(jù),其最大長度為 2^31 - 1 (2,147,483,647) 個字節(jié)。

其它數(shù)據(jù)類型

cursor

游標的引用。

sql_variant

一種存儲 SQL Server 支持的各種數(shù)據(jù)類型(text、ntext、timestamp 和 sql_variant 除外)值的數(shù)據(jù)類型。

table

一種特殊的數(shù)據(jù)類型,存儲供以后處理的結(jié)果集。

timestamp

數(shù)據(jù)庫范圍的唯一數(shù)字,每次更新行時也進行更新。

uniqueidentifier

全局唯一標識符 (GUID)。

mysql7 設(shè)置varchar 長度

如果是建表語句則在create table時即指定字段類型和長度,如果是修改表,則用alter語句修改,或者直接在客戶端工具上選中表右鍵編輯表,在可視化頁面調(diào)整長度都可以。


本文題目:mysql怎么設(shè)置長度 mysql怎么修改字段長度
本文路徑:http://www.dlmjj.cn/article/doddhip.html