新聞中心
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


咨詢
建站咨詢
