|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ç®å½ MySQLæ¯æå¤ç§åç±»åï¼æ°å¼ç±»åãæ¥æ/æ¶é´ç±»ååå符串(å符)ç±»åãæ¬ç« é¦å 对è¿äºåç±»åè¿è¡äºæ¦è¿°ï¼ç¶åæ´å 详ç»å°æè¿°äºåç§åçç±»åï¼ä»¥ååç±»ååå¨éæ±çæ»ç»ãæ¦è¿°å¾ç®åãå ³äºå ·ä½åç±»åç详ç»ä¿¡æ¯åºæ¥é 详ç»çæè¿°ï¼ä¾å¦æå®å¼æ¶å 许使ç¨çæ ¼å¼ã MySQLæ¯æå¤çç©ºé´æ°æ®çæ©å±åãå ³äºç©ºé´ç±»åçä¿¡æ¯åè§ç¬¬19ç« ï¼MySQLä¸çç©ºé´æ©å±ã å ç§åç±»åæè¿°ä½¿ç¨äºä¸è¿°æ¯ä¾ï¼ · M 表示æå¤§æ¾ç¤ºå®½åº¦ãæå¤§æææ¾ç¤ºå®½åº¦æ¯255ã · D éç¨äºæµ®ç¹åå®ç¹ç±»åï¼å¹¶è¡¨ç¤ºå°æ°ç¹åé¢ç使°ãæå¤§å¯è½ç弿¯30ï¼ä½ä¸åºå¤§äºM-2ã · æ¹æ¬å·(â[âåâ]â)表示å¯éé¨åã ä¸é¢ä¸ºæ°å¼åç±»åçæ¦è¿°ã详ç»ä¿¡æ¯åè§11.2èï¼âæ°å¼ç±»åâãååå¨éæ±åè§11.5èï¼âåç±»ååå¨éæ±âã Mæç¤ºæå¤§æ¾ç¤ºå®½åº¦ãæå¤§æææ¾ç¤ºå®½åº¦æ¯255ãæ¾ç¤ºå®½åº¦ä¸åå¨å¤§å°æç±»åå å«çå¼çèå´æ å ³ï¼ç¸å ³æè¿°è§11.2èï¼âæ°å¼ç±»åâã å¦æä¸ºä¸ä¸ªæ°å¼åæå®ZEROFILLï¼MySQLèªå¨ä¸ºè¯¥åæ·»å UNSIGNED屿§ã SERIALæ¯BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUEçä¸ä¸ªå«åã 卿´æ°åå®ä¹ä¸ï¼SERIAL DEFAULT VALUEæ¯NOT NULL AUTO_INCREMENT UNIQUEçä¸ä¸ªå«åã è¦åï¼åºå½æ¸ æ¥ï¼å½ä½¿ç¨å¨æ´æ°å¼ï¼å ¶ä¸ä¸ä¸ªæ¯UNSIGNEDç±»åï¼ä¹é´ä½¿ç¨åå·æ¶ï¼ç»ææ¯æ 符å·ãåè§12.8èï¼âCast彿°åæä½ç¬¦âã · BIT[(M)] ä½å段类åãM表示æ¯ä¸ªå¼ç使°ï¼èå´ä¸ºä»1å°64ã妿M被çç¥ï¼ é»è®¤ä¸º1ã · TINYINT[(M)] [UNSIGNED] [ZEROFILL] å¾å°çæ´æ°ã带符å·çèå´æ¯-128å°127ãæ ç¬¦å·çèå´æ¯0å°255ã · BOOLï¼BOOLEAN æ¯TINYINT(1)çåä¹è¯ãzeroå¼è¢«è§ä¸ºåãézeroå¼è§ä¸ºçã å¨å°æ¥ï¼å°æ ¹æ®æ åSQLå¼å ¥å®å ¨å¸å°ç±»åçå¤çã · SMALLINT[(M)] [UNSIGNED] [ZEROFILL] å°çæ´æ°ã带符å·çèå´æ¯-32768å°32767ãæ ç¬¦å·çèå´æ¯0å°65535ã · MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] ä¸ç大å°çæ´æ°ã带符å·çèå´æ¯-8388608å°8388607ãæ ç¬¦å·çèå´æ¯0å°16777215ã · INT[(M)] [UNSIGNED] [ZEROFILL] æ®é大å°çæ´æ°ã带符å·çèå´æ¯-2147483648å°2147483647ãæ ç¬¦å·çèå´æ¯0å°4294967295ã · INTEGER[(M)] [UNSIGNED] [ZEROFILL] è¿æ¯INTçåä¹è¯ã · BIGINT[(M)] [UNSIGNED] [ZEROFILL] å¤§æ´æ°ã带符å·çèå´æ¯-9223372036854775808å°9223372036854775807ãæ ç¬¦å·çèå´æ¯0å°18446744073709551615ã åºæ¸ æ¥BIGINTåçä¸è¿°å å®¹ï¼ o 使ç¨å¸¦ç¬¦å·çBIGINTæDOUBLEå¼è¿è¡ææç®æ³ï¼å æ¤é¤äºä½å½æ°ï¼ä¸åºä½¿ç¨å¤§äº9223372036854775807(63ä½)çæ ç¬¦å·çå¤§æ´æ°! å¦æè¿æ ·åï¼ç»æä¸çæåå ä½å¯è½åºéï¼è¿æ¯ç±äºå°BIGINTå¼è½¬æ¢ä¸ºDOUBLEè¿è¡åèäºå ¥æ¶é æçé误ã MySQLå¯ä»¥å¨ä»¥ä¸æ åµä¸å¤çBIGINTï¼ Â§ å½ä½¿ç¨æ´æ°å¨ä¸ä¸ªBIGINTåä¿åå¤§çæ ç¬¦å·ç弿¶ã § å¨MIN(col_name)æMAX(col_name)ä¸ï¼å ¶ä¸col_nameæBIGINTåã § ä½¿ç¨æä½ç¬¦(+ï¼-ï¼*çç)å¹¶ä¸ä¸¤ä¸ªæä½æ°åä¸ºæ´æ°æ¶ã o æ»æ¯å¯ä»¥ä½¿ç¨ä¸ä¸ªå符串å¨BIGINTåä¸ä¿åä¸¥æ ¼æ´æ°å¼ãå¨è¿ç§æ åµä¸ï¼MySQLæ§è¡å符串-æ°å转æ¢ï¼å ¶é´ä¸åå¨å精度表示ã o å½ä¸¤ä¸ªæä½æ°åä¸ºæ´æ°å¼æ¶ï¼-ã+å* æä½ç¬¦ä½¿ç¨BIGINTç®æ³ãè¿è¯´æå¦æä¹ä¸¤ä¸ªå¤§æ´æ°(ææ¥èªè¿åæ´æ°ç彿°)ï¼å½ç»æå¤§äº9223372036854775807æ¶ï¼ä¼å¾å°ææ³ä¸å°çç»æã · FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] å°(å精度)æµ®ç¹æ°ãå 许ç弿¯-3.402823466E+38å°-1.175494351E-38ã0å1.175494351E-38å°3.402823466E+38ãè¿äºæ¯ç论éå¶ï¼åºäºIEEEæ åãå®é çèå´æ ¹æ®ç¡¬ä»¶ææä½ç³»ç»çä¸åå¯è½ç¨å¾®å°äºã Mæ¯å°æ°çºµä½æ°ï¼Dæ¯å°æ°ç¹åé¢ç使°ã妿MåD被çç¥ï¼æ ¹æ®ç¡¬ä»¶å 许çéå¶æ¥ä¿åå¼ãåç²¾åº¦æµ®ç¹æ°ç²¾ç¡®å°å¤§çº¦7ä½å°æ°ä½ã 妿æå®UNSIGNEDï¼ä¸å 许è´å¼ã ä½¿ç¨æµ®ç¹æ°å¯è½ä¼éå°ææ³ä¸å°çé®é¢ï¼å 为å¨MySQLä¸çææè®¡ç®ç¨åç²¾åº¦å®æãåè§A.5.7èï¼âè§£å³ä¸ä¸å¹é è¡æå ³çé®é¢âã · DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] æ®é大å°(å精度)æµ®ç¹æ°ãå 许ç弿¯-1.7976931348623157E+308å°-2.2250738585072014E-308ã0å2.2250738585072014E-308å° 1.7976931348623157E+308ãè¿äºæ¯ç论éå¶ï¼åºäºIEEEæ åãå®é çèå´æ ¹æ®ç¡¬ä»¶ææä½ç³»ç»çä¸åå¯è½ç¨å¾®å°äºã Mæ¯å°æ°æ»ä½æ°ï¼Dæ¯å°æ°ç¹åé¢ç使°ã妿MåD被çç¥ï¼æ ¹æ®ç¡¬ä»¶å 许çéå¶æ¥ä¿åå¼ãåç²¾åº¦æµ®ç¹æ°ç²¾ç¡®å°å¤§çº¦15ä½å°æ°ä½ã 妿æå®UNSIGNEDï¼ä¸å 许è´å¼ã · DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL] 为DOUBLEçåä¹è¯ãé¤äºï¼å¦æSQLæå¡å¨æ¨¡å¼å æ¬REAL_AS_FLOATé项ï¼REALæ¯FLOATçåä¹è¯è䏿¯DOUBLEçåä¹è¯ã · FLOAT(p) [UNSIGNED] [ZEROFILL] æµ®ç¹æ°ãp表示精度ï¼ä»¥ä½æ°è¡¨ç¤ºï¼ï¼ä½MySQLåªä½¿ç¨è¯¥å¼æ¥ç¡®å®æ¯å¦ç»æåçæ°æ®ç±»å为FLOATæDOUBLEã妿p为ä»0å°24ï¼æ°æ®ç±»åå为没æMæDå¼çFLOATã妿p为ä»25å°53ï¼æ°æ®ç±»åå为没æMæDå¼çDOUBLEãç»æåèå´ä¸æ¬èåé¢æè¿°çå精度FLOATæå精度DOUBLEæ°æ®ç±»åç¸åã FLOAT(p)è¯æ³ä¸ODBCå ¼å®¹ã · DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] å缩çâä¸¥æ ¼âå®ç¹æ°ãMæ¯å°æ°ä½æ°(精度)çæ»æ°ï¼Dæ¯å°æ°ç¹(æ 度)åé¢ç使°ãå°æ°ç¹å(è´æ°)çâ-â符å·ä¸å æ¬å¨Mä¸ã妿Dæ¯0ï¼å弿²¡æå°æ°ç¹æåæ°é¨åãDECIMALæ´æ°æå¤§ä½æ°(M)为65ãæ¯æçåè¿å¶æ°çæå¤§ä½æ°(D)æ¯30ã妿D被çç¥ï¼ é»è®¤æ¯0ã妿M被çç¥ï¼ é»è®¤æ¯10ã 妿æå®UNSIGNEDï¼ä¸å 许è´å¼ã ææDECIMALåçåºæ¬è®¡ç®(+ï¼-ï¼*ï¼/)ç¨65ä½ç²¾åº¦å®æã · DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] æ¯DECIMALçåä¹è¯ãFIXEDåä¹è¯éç¨äºä¸å ¶å®æå¡å¨çå ¼å®¹æ§ã æ¬è综å讨论äºä¸´æ¶åç±»åã详ç»ä¿¡æ¯ï¼åè§11.3èï¼âæ¥æåæ¶é´ç±»åâãååå¨éæ±åè§11.5èï¼âåç±»ååå¨éæ±âã · DATE æ¥æãæ¯æçèå´ä¸º'1000-01-01'å°'9999-12-31'ãMySQL以'YYYY-MM-DD'æ ¼å¼æ¾ç¤ºDATEå¼ï¼ä½å 许使ç¨åç¬¦ä¸²ææ°å为DATEååé å¼ã · DATETIME æ¥æåæ¶é´çç»åãæ¯æçèå´æ¯'1000-01-01 00:00:00'å°'9999-12-31 23:59:59'ãMySQL以'YYYY-MM-DD HH:MM:SS'æ ¼å¼æ¾ç¤ºDATETIMEå¼ï¼ä½å 许使ç¨åç¬¦ä¸²ææ°å为DATETIMEååé å¼ã · TIMESTAMP[(M)] æ¶é´æ³ãèå´æ¯'1970-01-01 00:00:00'å°2037å¹´ã TIMESTAMPåç¨äºINSERTæUPDATEæä½æ¶è®°å½æ¥æåæ¶é´ãå¦æä½ ä¸åé ä¸ä¸ªå¼ï¼è¡¨ä¸ç第ä¸ä¸ªTIMESTAMPåèªå¨è®¾ç½®ä¸ºæè¿æä½çæ¥æåæ¶é´ãä¹å¯ä»¥éè¿åé ä¸ä¸ªNULLå¼ï¼å°TIMESTAMPå设置为å½åçæ¥æåæ¶é´ã TIMESTAMPå¼è¿ååæ¾ç¤ºä¸º'YYYY-MM-DD HH:MM:SS'æ ¼å¼çåç¬¦ä¸²ï¼æ¾ç¤ºå®½åº¦åºå®ä¸º19个å符ã妿æ³è¦è·å¾æ°åå¼ï¼åºå¨TIMESTAMP åæ·»å +0ã æ³¨éï¼MySQL 4.1以å使ç¨çTIMESTAMPæ ¼å¼å¨MySQL 5.1ä¸ä¸æ¯æï¼å ³äºæ§æ ¼å¼çä¿¡æ¯åè§MySQL 4.1 åèæåã · TIME æ¶é´ãèå´æ¯'-838:59:59'å°'838:59:59'ãMySQL以'HH:MM:SS'æ ¼å¼æ¾ç¤ºTIMEå¼ï¼ä½å 许使ç¨åç¬¦ä¸²ææ°å为TIMEååé å¼ã · YEAR[(2|4)] 䏤使å使 ¼å¼çå¹´ãé»è®¤æ¯å使 ¼å¼ãå¨å使 ¼å¼ä¸ï¼å 许ç弿¯1901å°2155å0000ãå¨ä¸¤ä½æ ¼å¼ä¸ï¼å 许ç弿¯70å°69ï¼è¡¨ç¤ºä»1970å¹´å°2069å¹´ãMySQL以YYYY æ ¼å¼æ¾ç¤ºYEARå¼ï¼ä½å 许使ç¨åç¬¦ä¸²ææ°å为YEARååé å¼ã æ¬è综å讨论äºå符串åç±»åã详ç»ä¿¡æ¯åè§11.4èï¼âStringç±»åâãååå¨éæ±åè§11.5èï¼âåç±»ååå¨éæ±âã å¨æäºæ åµä¸ï¼MySQLå¯ä»¥å°ä¸ä¸ªåç¬¦ä¸²åæ´æ¹ä¸ºä¸åäºCREATE TABLEæALTER TABLEè¯å¥ä¸æç»åºçç±»åãåè§13.1.5.1èï¼âæ²å¯çåè§æ ¼åæ´âã MySQL 5.1åç¬¦ä¸²æ°æ®ç±»åå æ¬é¨åå¨MySQL 4.1ä¹åççæ¬ä¸æ²¡æçç¹æ§ï¼ · 许å¤åç¬¦ä¸²æ°æ®ç±»åçåå®ä¹å¯ä»¥å æ¬æå®å符éçCHARACTER SET屿§ï¼ä¹å¯è½å æ¬æ ¡å¯¹è§åã(CHARSETæ¯CHARACTER SETçä¸ä¸ªåä¹è¯ï¼ãè¿äºå±æ§éç¨äºCHARãVARCHARãTEXTç±»åãENUMåSETãä¾å¦ï¼ · CREATE TABLE t · ( · c1 CHAR(20) CHARACTER SET utf8, · c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin · ); 该表å®ä¹å建äºä¸ä¸ªå为c1çåï¼å ·æä¸ä¸ªutf8å符éå该å符éçé»è®¤ æ ¡å¯¹è§åï¼åä¸ä¸ªå为c2çå以ålatin1å符éå该å符éçäºå æ ¡å¯¹è§åãäºå æ ¡å¯¹è§å对大å°å䏿æã · MySQL 5.1ç¨å符åä½è§£éå¨å符åå®ä¹ä¸çé¿åº¦è§èã(以åçä¸äºMySQLçæ¬ä»¥åèè§£éé¿åº¦ï¼ã · 对äºCHARãVARCHARåTEXTç±»åï¼BINARY屿§å¯ä»¥ä¸ºååé 该åå符éç æ ¡å¯¹è§åã · å符åçæåºåæ¯è¾åºäºåé ç»åçå符éãå¨ä»¥åççæ¬ä¸ï¼æåºåæ¯è¾åºäºæå¡å¨å符éçæ ¡å¯¹è§åã对äºCHARåVARCHAR åï¼ä½ å¯ä»¥ç¨BINARY屿§å£°æå让æåºå æ ¡å¯¹è§å使ç¨å½åçå符代ç å¼è䏿¯è¯æ±é¡ºåºã å ³äºMySQL 5.1ä¸å符éçæ¯æï¼åè§ç¬¬10ç« ï¼åç¬¦éæ¯æã · [NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE] åºå®é¿åº¦å符串ï¼å½ä¿åæ¶å¨å³ä¾§å¡«å ç©ºæ ¼ä»¥è¾¾å°æå®çé¿åº¦ãM表示åé¿åº¦ãMçèå´æ¯0å°255个åç¬¦ã æ³¨éï¼å½æ£ç´¢CHAR弿¶å°¾é¨ç©ºæ ¼è¢«å é¤ã 妿æ³è¦å°æä¸ªCHARçé¿åº¦è®¾ä¸ºå¤§äº255ï¼æ§è¡çCREATE TABLEæALTER TABLEè¯å¥å°å¤±è´¥å¹¶æç¤ºéè¯¯ï¼ mysql> CREATE TABLE c1 (col1 INT, col2 CHAR(500)); ERROR 1074 (42000): Column length too big for column 'col' (max = 255); use BLOB or TEXT instead
mysql> SHOW CREATE TABLE c1; ERROR 1146 (42S02): Table 'test.c1' doesn't existCHARæ¯CHARACTERçç®åãNATIONAL CHAR(æå ¶çæçå½¢å¼NCHAR)æ¯æ åçå®ä¹CHARååºä½¿ç¨ é»è®¤å符éçSQLæ¹æ³ãè¿å¨MySQLä¸ä¸ºé»è®¤å¼ã BINARY屿§æ¯æå®åå符éçäºå æ ¡å¯¹è§åçç®åãæåºåæ¯è¾åºäºæ°å¼å符å¼ã åç±»åCHAR BYTEæ¯CHAR BINARYçä¸ä¸ªå«åãè¿æ¯ä¸ºäºä¿è¯å ¼å®¹æ§ã å¯ä»¥ä¸ºCHARæå®ASCII屿§ãå®åé latin1å符éã å¯ä»¥ä¸ºCHARæå®UNICODE屿§ãå®åé ucs2å符éã MySQLå 许å建类åCHAR(0)çåãè¿ä¸»è¦ç¨äºå¿ é¡»æä¸ä¸ªåä½å®é ä¸ä¸ä½¿ç¨å¼çæ§çæ¬çåºç¨ç¨åºç¸å ¼å®¹ãå½ä½ éè¦åªè½å两个å¼çåæ¶ä¹å¾å¥½ï¼æ²¡æå®ä¹ä¸ºNOT NULLçä¸ä¸ªCHAR(0)ååªå ç¨ä¸ä½ï¼åªå¯ä»¥åå¼NULLå''(空å符串)ã · CHAR è¿æ¯CHAR(1)çåä¹è¯ã · [NATIONAL] VARCHAR(M) [BINARY] åé¿å符串ãM 表示æå¤§åé¿åº¦ãMçèå´æ¯0å°65,535ã(VARCHARçæå¤§å®é é¿åº¦ç±æé¿çè¡ç大å°å使ç¨çå符éç¡®å®ãæå¤§ææé¿åº¦æ¯65,532åèï¼ã 注éï¼MySQL 5.1éµä»æ åSQLè§èï¼å¹¶ä¸ä¸å é¤VARCHARå¼çå°¾é¨ç©ºæ ¼ã VARCHARæ¯å符VARYINGçç®åã BINARY屿§æ¯æå®åçå符éçäºå æ ¡å¯¹è§åçç®åãæåºåæ¯è¾åºäºæ°å¼å符å¼ã VARCHARä¿åæ¶ç¨ä¸ä¸ªåèæä¸¤ä¸ªåèé¿çåç¼+æ°æ®ã妿VARCHARå声æçé¿åº¦å¤§äº255ï¼é¿åº¦åç¼æ¯ä¸¤ä¸ªåèã · BINARY(M) BINARYç±»å类似äºCHARç±»åï¼ä½ä¿åäºè¿å¶åèå符串è䏿¯éäºè¿å¶å符串ã · VARBINARY(M) VARBINARYç±»å类似äºVARCHARç±»åï¼ä½ä¿åäºè¿å¶åèå符串è䏿¯éäºè¿å¶å符串ã · TINYBLOB æå¤§é¿åº¦ä¸º255(28â1)åèçBLOBåã · TINYTEXT æå¤§é¿åº¦ä¸º255(28â1)å符çTEXTåã · BLOB[(M)] æå¤§é¿åº¦ä¸º65,535(216â1)åèçBLOBåã å¯ä»¥ç»åºè¯¥ç±»åçå¯éé¿åº¦Mã妿ç»åºï¼åMySQLå°åå建为æå°çä½è¶³ä»¥å®¹çº³Måèé¿çå¼çBLOBç±»åã · TEXT[(M)] æå¤§é¿åº¦ä¸º65,535(216â1)å符çTEXTåã å¯ä»¥ç»åºå¯éé¿åº¦MãåMySQLå°åå建为æå°çä½è¶³ä»¥å®¹çº³Må符é¿çå¼çTEXTç±»åã · MEDIUMBLOB æå¤§é¿åº¦ä¸º16,777,215(224â1)åèçBLOBåã · MEDIUMTEXT æå¤§é¿åº¦ä¸º16,777,215(224â1)å符çTEXTåã · LONGBLOB æå¤§é¿åº¦ä¸º4,294,967,295æ4GB(232â1)åèçBLOBåãLONGBLOBåçæå¤§ææ(å 许ç)é¿åº¦åå³äºå®¢æ·ç«¯/æå¡å¨åè®®ä¸é ç½®æå¤§å 大å°åå¯ç¨çå åã · LONGTEXT æå¤§é¿åº¦ä¸º4,294,967,295æ4GB(232â1)å符çTEXTåãLONGTEXTåçæå¤§ææ(å 许ç)é¿åº¦åå³äºå®¢æ·ç«¯/æå¡å¨åè®®ä¸é ç½®æå¤§å 大å°åå¯ç¨çå åã · ENUM('value1','value2',...) æä¸¾ç±»åãåªè½æä¸ä¸ªå¼çå符串ï¼ä»å¼å'value1'ï¼'value2'ï¼...ï¼NULLä¸æç¹æ® ''é误å¼ä¸éåºãENUMåæå¤å¯ä»¥æ65,535个æªç¶ä¸åçå¼ãENUMå¼å¨å é¨ç¨æ´æ°è¡¨ç¤ºã · SET('value1','value2',...) ä¸ä¸ªè®¾ç½®ãå符串对象å¯ä»¥æé¶ä¸ªæå¤ä¸ªå¼ï¼æ¯ä¸ªå¼å¿ é¡»æ¥èªåå¼'value1'ï¼'value2'ï¼...SETåæå¤å¯ä»¥æ64个æåãSETå¼å¨å é¨ç¨æ´æ°è¡¨ç¤ºã MySQLæ¯ææææ åSQLæ°å¼æ°æ®ç±»åãè¿äºç±»åå æ¬ä¸¥æ ¼æ°å¼æ°æ®ç±»å(INTEGERãSMALLINTãDECIMALåNUMERIC)ï¼ä»¥åè¿ä¼¼æ°å¼æ°æ®ç±»å(FLOATãREALåDOUBLE PRECISION)ãå ³é®åINTæ¯INTEGERçåä¹è¯ï¼å ³é®åDECæ¯DECIMALçåä¹è¯ã BITæ°æ®ç±»åä¿åä½å段å¼ï¼å¹¶ä¸æ¯æMyISAMãMEMORYãInnoDBåBDB表ã ä½ä¸ºSQLæ åçæ©å±ï¼MySQL乿¯ææ´æ°ç±»åTINYINTãMEDIUMINTåBIGINTãä¸é¢ç表æ¾ç¤ºäºéè¦çæ¯ä¸ªæ´æ°ç±»åçåå¨åèå´ã
MySQLè¿æ¯æéæ©å¨è¯¥ç±»åå ³é®ååé¢çæ¬å·å æå®æ´æ°å¼çæ¾ç¤ºå®½åº¦(ä¾å¦ï¼INT(4))ã该å¯éæ¾ç¤ºå®½åº¦è§å®ç¨äºæ¾ç¤ºå®½åº¦å°äºæå®çå宽度ç弿¶ä»å·¦ä¾§å¡«æ»¡å®½åº¦ã æ¾ç¤ºå®½åº¦å¹¶ä¸éå¶å¯ä»¥å¨åå ä¿åçå¼çèå´ï¼ä¹ä¸éå¶è¶ è¿åçæå®å®½åº¦çå¼çæ¾ç¤ºã å½ç»åå¯éæ©å±å±æ§ZEROFILLä½¿ç¨æ¶ï¼ é»è®¤è¡¥å çç©ºæ ¼ç¨é¶ä»£æ¿ãä¾å¦ï¼å¯¹äºå£°æä¸ºINT(5) ZEROFILLçåï¼å¼4æ£ç´¢ä¸º00004ã请注æå¦æå¨æ´æ°åä¿åè¶ è¿æ¾ç¤ºå®½åº¦çä¸ä¸ªå¼ï¼å½MySQLä¸ºå¤æèæ¥çæä¸´æ¶è¡¨æ¶ä¼éå°é®é¢ï¼å 为å¨è¿äºæ åµä¸MySQLç¸ä¿¡æ°æ®éåååå®½åº¦ã æææ´æ°ç±»åå¯ä»¥æä¸ä¸ªå¯é(éæ å)屿§UNSIGNEDãå½ä½ æ³è¦å¨åå åªå 许éè´æ°å该åéè¦è¾å¤§çä¸éæ°å¼èå´æ¶å¯ä»¥ä½¿ç¨æ 符å·å¼ã æµ®ç¹åå®ç¹ç±»åä¹å¯ä»¥ä¸ºUNSIGNEDãåæ°ç±»åï¼è¯¥å±æ§é²æ¢è´å¼ä¿åå°åä¸ãç¶èï¼ä¸æ´æ°ç±»åä¸åçæ¯ï¼åå¼çä¸èå´ä¿æä¸åã å¦æä¸ºä¸ä¸ªæ°å¼åæå®ZEROFILLï¼MySQLèªå¨ä¸ºè¯¥åæ·»å UNSIGNED屿§ã å¯¹äºæµ®ç¹åç±»åï¼å¨MySQLä¸å精度å¼ä½¿ç¨4个åèï¼å精度å¼ä½¿ç¨8个åèã FLOATç±»åç¨äºè¡¨ç¤ºè¿ä¼¼æ°å¼æ°æ®ç±»åãSQLæ åå 许å¨å ³é®åFLOATåé¢çæ¬å·å éæ©ç¨ä½æå®ç²¾åº¦(ä½ä¸è½ä¸ºææ°èå´)ãMySQLè¿æ¯æå¯éçåªç¨äºç¡®å®åå¨å¤§å°ç精度è§å®ã0å°23ç精度对åºFLOATåç4åèå精度ã24å°53ç精度对åºDOUBLEåç8åèå精度ã MySQLå 许使ç¨éæ åè¯æ³ï¼FLOAT(M,D)æREAL(M,D)æDOUBLE PRECISION(M,D)ãè¿éï¼â(M,D)â表示该å¼ä¸å ±æ¾ç¤ºM使´æ°ï¼å ¶ä¸Dä½ä½äºå°æ°ç¹åé¢ãä¾å¦ï¼å®ä¹ä¸ºFLOAT(7,4)çä¸ä¸ªåå¯ä»¥æ¾ç¤ºä¸º-999.9999ãMySQLä¿å弿¶è¿è¡åèäºå ¥ï¼å æ¤å¦æå¨FLOAT(7,4)åå æå ¥999.00009ï¼è¿ä¼¼ç»ææ¯999.0001ã MySQLå°DOUBLEè§ä¸ºDOUBLE PRECISION(éæ åæ©å±)çåä¹è¯ãMySQLè¿å°REALè§ä¸ºDOUBLE PRECISION(éæ åæ©å±)çåä¹è¯ï¼é¤éSQLæå¡å¨æ¨¡å¼å æ¬REAL_AS_FLOATé项ã 为äºä¿è¯æå¤§å¯è½çå¯ç§»æ¤æ§ï¼éè¦ä½¿ç¨è¿ä¼¼æ°å¼æ°æ®å¼åå¨ç代ç åºä½¿ç¨FLOATæDOUBLE PRECISIONï¼ä¸è§å®ç²¾åº¦æä½æ°ã DECIMALåNUMERICç±»åå¨MySQLä¸è§ä¸ºç¸åçç±»åãå®ä»¬ç¨äºä¿åå¿ é¡»ä¸ºç¡®å精度çå¼ï¼ä¾å¦è´§å¸æ°æ®ãå½å£°æè¯¥ç±»åçåæ¶ï¼å¯ä»¥(å¹¶ä¸é常è¦)æå®ç²¾åº¦åæ 度ï¼ä¾å¦ï¼ salary DECIMAL(5,2)å¨è¯¥ä¾åä¸ï¼5æ¯ç²¾åº¦ï¼2æ¯æ 度ã精度表示ä¿åå¼ç主è¦ä½æ°ï¼æ åº¦è¡¨ç¤ºå°æ°ç¹åé¢å¯ä»¥ä¿åç使°ã å¨MySQL 5.1ä¸ä»¥äºè¿å¶æ ¼å¼ä¿åDECIMALåNUMERICå¼ã æ åSQLè¦æ±salaryåè½å¤ç¨5使´æ°ä½å两ä½å°æ°ä¿åä»»ä½å¼ãå æ¤ï¼å¨è¿ç§æ åµä¸å¯ä»¥ä¿åå¨salaryåçå¼çèå´æ¯ä»-999.99å°999.99ã 卿 åSQLä¸ï¼è¯æ³DECIMAL(M)çä»·äºDECIMAL(M,0)ãåæ ·ï¼è¯æ³DECIMALçä»·äºDECIMAL(M,0)ï¼å¯ä»¥éè¿è®¡ç®ç¡®å®Mçå¼ãå¨MySQL 5.1䏿¯æDECIMALåNUMERICæ°æ®ç±»åçåéå½¢å¼ãMé»è®¤å¼æ¯10ã DECIMALæNUMERICçæå¤§ä½æ°æ¯65ï¼ä½å ·ä½çDECIMALæNUMERICåçå®é èå´åå ·ä½åçç²¾åº¦ææ åº¦çº¦æã妿æ¤ç±»ååé çå¼å°æ°ç¹åé¢ç使°è¶ è¿æå®çæ 度å 许çèå´ï¼å¼è¢«è½¬æ¢ä¸ºè¯¥æ 度ã(å ·ä½æä½ä¸æä½ç³»ç»æå ³ï¼ä½ä¸è¬ç»æå被æªåå°å 许ç使°ï¼ã BITæ°æ®ç±»åå¯ç¨æ¥ä¿åä½å段å¼ãBIT(M)ç±»åå 许åå¨Mä½å¼ãMèå´ä¸º1å°64ã è¦æå®ä½å¼ï¼å¯ä»¥ä½¿ç¨b'value'符ãvalueæ¯ä¸ä¸ªç¨0å1ç¼åçäºè¿å¶å¼ãä¾å¦ï¼b'111'åb'100000000'åå«è¡¨ç¤º7å128ãåè§9.1.5èï¼âä½å段å¼âã å¦æä¸ºBIT(M)ååé çå¼çé¿åº¦å°äºMä½ï¼å¨å¼ç左边ç¨0å¡«å ãä¾å¦ï¼ä¸ºBIT(6)ååé ä¸ä¸ªå¼b'101'ï¼å ¶ææä¸åé b'000101'ç¸åã å½è¦å¨ä¸ä¸ªæ°å¼åå ä¿åä¸ä¸ªè¶ åºè¯¥åå 许èå´ç弿¶ï¼MySQLçæä½åå³äºæ¤æ¶ææçSQL模å¼ãå¦ææ¨¡å¼æªè®¾ç½®ï¼MySQLå°å¼è£åªå°èå´çç¸åºç«¯ç¹ï¼å¹¶ä¿åè£å好çå¼ã使¯ï¼å¦ææ¨¡å¼è®¾ç½®ä¸ºtraditional(âä¸¥æ ¼æ¨¡å¼â)ï¼è¶ åºèå´çå¼å°è¢«æç»å¹¶æç¤ºé误ï¼å¹¶ä¸æ ¹æ®SQLæ åæå ¥ä¼å¤±è´¥ãåè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã 妿INT忝UNSIGNEDï¼åèå´ç大å°ç¸åï¼ä½å ¶ç«¯ç¹ä¼å为å°0å4294967295ãå¦æä½ è¯å¾ä¿å-9999999999å9999999999ï¼ä»¥éä¸¥æ ¼æ¨¡å¼ä¿åå°åä¸ç弿¯0å4294967296ã 妿卿µ®ç¹æå®ç¹åä¸åé çå¼è¶ è¿æå®(æé»è®¤)ç²¾åº¦åæ åº¦è§å®çèå´ï¼MySQL以éä¸¥æ ¼æ¨¡å¼ä¿å表示èå´ç¸åºç«¯ç¹çå¼ã å½MySQL没æå·¥ä½å¨ä¸¥æ ¼æ¨¡å¼æ¶ï¼å¯¹äºALTER TABLEãLOAD DATA INFILEãUPDATEåå¤è¡INSERTè¯å¥ï¼ç±äºè£åªåçç转æ¢å°æ¥å为è¦åãå½MySQLå·¥ä½å¨ä¸¥æ ¼æ¨¡å¼æ¶ï¼è¿äºè¯å¥å°å¤±è´¥ï¼å¹¶ä¸é¨åæå ¨é¨å¼ä¸ä¼æå ¥ææ´æ¹ï¼åå³äºæ¯å¦è¡¨ä¸ºäºå¡è¡¨åå ¶å®å ç´ ã详æ åè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã 表示æ¶é´å¼çDATEåæ¶é´ç±»å为DATETIMEãDATEãTIMESTAMPãTIMEåYEARãæ¯ä¸ªæ¶é´ç±»åæä¸ä¸ªææå¼èå´åä¸ä¸ªâé¶âå¼ï¼å½æå®ä¸åæ³çMySQLä¸è½è¡¨ç¤ºç弿¶ä½¿ç¨âé¶âå¼ãTIMESTAMPç±»åæä¸æçèªå¨æ´æ°ç¹æ§ï¼å°å¨åé¢æè¿°ã 妿è¯å¾æå ¥ä¸ä¸ªä¸åæ³çæ¥æï¼MySQLå°ç»åºè¦åæé误ãå¯ä»¥ä½¿ç¨ALLOW_INVALID_DATES SQL模å¼è®©MySQLæ¥åæäºæ¥æï¼ä¾å¦'1999-11-31'ãå½ä½ æ³è¦ä¿åä¸ä¸ªâå¯è½é误çâç¨æ·å·²ç»å¨æ°æ®åºä¸æå®(ä¾å¦ï¼ä»¥webå½¢å¼)ç¨äºå°æ¥å¤çç弿¶å¾æç¨ãå¨è¿ç§æ¨¡å¼ä¸ï¼MySQLåªéªè¯æèå´ä¸ºä»0å°12ï¼æ¥èå´ä¸ºä»0å°31ãè¿äºèå´å¯ä»¥å æ¬é¶ï¼å 为MySQLå 许å¨DATEæDATETIMEåä¿åæ¥/æåæ¥æ¯é¶çæ¥æãè¿å¨åºç¨ç¨åºéè¦ä¿åä¸ä¸ªä½ ä¸ç¥éç¡®åæ¥æççæ¥æ¶é常æç¨ãå¨è¿ç§æ åµä¸ï¼åªéè¦å°æ¥æä¿å为'1999-00-00'æ'1999-01-00'ã妿ä¿åæ¤ç±»æ¥æï¼DATE_SUB()æDATE_ADDçéè¦å®æ´æ¥æç彿°ä¸ä¼å¾å°æ£ç¡®çç»æã(å¦æä½ ä¸æ³å¨æ¥æä¸åºç°é¶ï¼å¯ä»¥ä½¿ç¨NO_ZERO_IN_DATE SQL模å¼)ã MySQLè¿å 许å°'0000-00-00'ä¿å为âä¼ªæ¥æâ(妿ä¸ä½¿ç¨NO_ZERO_DATE SQL模å¼)ãè¿å¨æäºæ åµä¸æ¯ä½¿ç¨NULL弿´æ¹ä¾¿(并䏿°æ®åç´¢å¼å ç¨çç©ºé´æ´å°)ã å°sql_modeç³»ç»åé设置为ç¸åºæ¨¡å¼å¼ï¼å¯ä»¥æ´ç¡®åä½ æ³è®©MySQLæ¯æåªç§æ¥æãåè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã å½ä½¿ç¨æ¥æåæ¶é´ç±»åæ¶åºè®°ä½ä»¥ä¸å ç¹ï¼ · MySQL以æ åè¾åºæ ¼å¼æ£ç´¢ç»å®æ¥æææ¶é´ç±»åçå¼ï¼ä½å®å°½åè§£éä½ æå®çåç§è¾å ¥å¼æ ¼å¼(ä¾å¦ï¼å½ä½ æå®ä¸ä¸ªåé ç»æä¸æ¥æææ¶é´ç±»åè¿è¡æ¯è¾ç弿¶)ãåªæ¯æä¸é¢ç« èä¸æè¿°çæ ¼å¼ãææä½ è½æä¾ææå¼ãå¦æä½ ä½¿ç¨å ¶å®æ ¼å¼çå¼ä¼åçææ³ä¸å°çç»æã · å å«ä¸¤ä½å¹´å¼çæ¥æä¼ä»¤äººæ¨¡ç³ï¼å 为ä¸çºªä¸ç¥éãMySQL使ç¨ä»¥ä¸è§åè§£é两ä½å¹´å¼ï¼ o 70-99èå´çå¹´å¼è½¬æ¢ä¸º1970-1999ã o 00-69èå´çå¹´å¼è½¬æ¢ä¸º2000-2069ã · 尽管MySQLå°è¯è§£éå ç§æ ¼å¼çå¼ï¼æ¥ææ»æ¯ä»¥å¹´-æ-æ¥é¡ºåº(ä¾å¦ï¼'98-09-04')ï¼è䏿¯å ¶å®å°æ¹å¸¸ç¨çæ-æ¥-å¹´ææ¥-æ-年顺åº(ä¾å¦ï¼'09-04-98'ï¼'04-09-98')ã · 妿å¼ç¨äºæ°å¼ä¸ä¸æä¸ï¼MySQLèªå¨å°æ¥æææ¶é´ç±»åçå¼è½¬æ¢ä¸ºæ°åï¼åä¹äº¦ç¶ã · å½ MySQLéå°ä¸ä¸ªæ¥æææ¶é´ç±»åçè¶ åºè崿坹äºè¯¥ç±»åä¸åæ³ç弿¶(妿¬èå¼å§ææè¿°)ï¼å®å°è¯¥å¼è½¬æ¢ä¸ºè¯¥ç±»çâé¶âå¼ãä¸ä¸ªä¾å¤æ¯è¶ åºèå´çTIMEå¼è¢«è£åªå°TIMEèå´çç¸åºç«¯ç¹ã ä¸é¢ç表æ¾ç¤ºäºåç±»âé¶âå¼çæ ¼å¼ã请注æå¦æå¯ç¨NO_ZERO_DATE SQL模å¼ï¼ä½¿ç¨è¿äºå¼ä¼äº§çè¦åã
· âé¶â弿¯ç¹æ®å¼ï¼ä½ä½ å¯ä»¥ä½¿ç¨è¡¨å æ¾ç¤ºç弿¾å¼ä¿åæå¼ç¨å®ä»¬ãä½ ä¹å¯ä»¥ä½¿ç¨å¼'0'æ0æ¥ä¿åæå¼ç¨ï¼åèµ·æ¥æ´å®¹æã · MyODBCä¸ä½¿ç¨çâé¶âæ¥æææ¶é´å¼å¨MyODBC 2.50.12å以ä¸çæ¬ä¸è¢«èªå¨è½¬æ¢ä¸ºNULLï¼å 为ODBCä¸è½å¤çæ¤ç±»å¼ã DATETIMEãDATEåTIMESTAMPç±»åæ¯ç¸å ³çã该èæè¿°äºå®ä»¬çç¹å¾ï¼å®ä»¬çç¸ä¼¼ç¹åä¸åç¹ã å½ä½ éè¦åæ¶å 嫿¥æåæ¶é´ä¿¡æ¯ç弿¶å使ç¨DATETIMEç±»åãMySQL以'YYYY-MM-DD HH:MM:SS'æ ¼å¼æ£ç´¢åæ¾ç¤ºDATETIMEå¼ãæ¯æçèå´ä¸º'1000-01-01 00:00:00'å°'9999-12-31 23:59:59'ã(âæ¯æâ表示尽管å åçå¼å¯è½å·¥ä½ï¼ä½æ²¡æä¿è¯)ã å½ä½ åªéè¦æ¥æå¼èä¸éè¦æ¶é´é¨åæ¶åºä½¿ç¨DATEç±»åãMySQLç¨'YYYY-MM-DD'æ ¼å¼æ£ç´¢åæ¾ç¤ºDATEå¼ãæ¯æçèå´æ¯'1000-01-01'å° '9999-12-31'ã TIMESTAMPåç±»åç屿§ä¸åºå®ï¼åå³äºMySQLçæ¬åæå¡å¨è¿è¡çSQL模å¼ãè¿äºå±æ§å°å¨æ¬èåé¢æè¿°ã å¯ä»¥ä½¿ç¨ä»»ä½å¸¸è§æ ¼å¼æå®DATETIMEãDATEåTIMESTAMPå¼ï¼ · 'YYYY-MM-DD HH:MM:SS'æ'YY-MM-DD HH:MM:SS'æ ¼å¼çå符串ãå 许âä¸ä¸¥æ ¼âè¯æ³ï¼ä»»ä½æ ç¹ç¬¦é½å¯ä»¥ç¨åæ¥æé¨åææ¶é´é¨åä¹é´çé´å²ç¬¦ãä¾å¦ï¼'98-12-31 11:30:45'ã'98.12.31 11+30+45'ã'98/12/31 11*30*45'å'98@12@31 11^30^45'æ¯çä»·çã · 'YYYY-MM-DD'æ'YY-MM-DD'æ ¼å¼çå符串ãè¿éä¹å 许使ç¨âä¸ä¸¥æ ¼çâè¯æ³ãä¾å¦ï¼'98-12-31'ã'98.12.31'ã'98/12/31'å'98@12@31'æ¯çä»·çã · 'YYYYMMDDHHMMSS'æ'YYMMDDHHMMSS'æ ¼å¼ç没æé´å²ç¬¦çå符串ï¼åå®åç¬¦ä¸²å¯¹äºæ¥æç±»åæ¯ææä¹çãä¾å¦ï¼'19970523091528'å'970523091528'被解é为'1997-05-23 09:15:28'ï¼ä½'971122129015'æ¯ä¸åæ³ç(宿ä¸ä¸ªæ²¡ææä¹çåéé¨å)ï¼å°å为'0000-00-00 00:00:00'ã · 'YYYYMMDD'æ'YYMMDD'æ ¼å¼ç没æé´å²ç¬¦çå符串ï¼åå®åç¬¦ä¸²å¯¹äºæ¥æç±»åæ¯ææä¹çãä¾å¦ï¼'19970523'å'970523'被解é为 '1997-05-23'ï¼ä½'971332'æ¯ä¸åæ³ç(宿ä¸ä¸ªæ²¡ææä¹çæåæ¥é¨å)ï¼å°å为'0000-00-00'ã · YYYYMMDDHHMMSSæYYMMDDHHMMSSæ ¼å¼çæ°åï¼å宿°åå¯¹äºæ¥æç±»åæ¯ææä¹çãä¾å¦ï¼19830905132800å830905132800被解é为 '1983-09-05 13:28:00'ã · YYYYMMDDæYYMMDDæ ¼å¼çæ°åï¼å宿°åå¯¹äºæ¥æç±»åæ¯ææä¹çãä¾å¦ï¼19830905å830905被解é为'1983-09-05'ã · 彿°è¿åçç»æï¼å ¶å¼éåDATETIMEãDATEæè TIMESTAMPä¸ä¸æï¼ä¾å¦NOW()æCURRENT_DATEã æ æDATETIMEãDATEæè TIMESTAMPå¼è¢«è½¬æ¢ä¸ºç¸åºç±»åçâé¶âå¼('0000-00-00 00:00:00'ã'0000-00-00'æè 00000000000000)ã 对äºå æ¬æ¥æé¨åé´å²ç¬¦çå符串å¼ï¼å¦ææ¥åæçå¼å°äº10ï¼ä¸éè¦æå®ä¸¤ä½æ°ã'1979-6-9'ä¸'1979-06-09'æ¯ç¸åçãåæ ·ï¼å¯¹äºå æ¬æ¶é´é¨åé´å²ç¬¦çå符串å¼ï¼å¦ææ¶ãååç§çå¼å°äº10ï¼ä¸éè¦æå®ä¸¤ä½æ°ã'1979-10-30 1:2:3'ä¸'1979-10-30 01:02:03'ç¸åã æ°åå¼åºä¸º6ã8ã12æè 14ä½é¿ã妿ä¸ä¸ªæ°å¼æ¯8æ14ä½é¿ï¼ååå®ä¸ºYYYYMMDDæYYYYMMDDHHMMSSæ ¼å¼ï¼å4使°è¡¨ç¤ºå¹´ã妿æ°å æ¯6æ12ä½é¿ï¼ååå®ä¸ºYYMMDDæYYMMDDHHMMSSæ ¼å¼ï¼å2使°è¡¨ç¤ºå¹´ãå ¶å®æ°å被解é为仿ä½ç¨é¶å¡«å å°äºæè¿çé¿åº¦ã æå®ä¸ºééå®ç¬¦å符串çå¼ä½¿ç¨ç»å®çé¿åº¦è¿è¡è§£éã妿å符串为8æ14å符é¿ï¼å4使°è¡¨ç¤ºå¹´ãå¦åï¼å2使°è¡¨ç¤ºå¹´ãä»å·¦åå³è§£éå符串å åºç°çåé¨åï¼ä»¥åç°å¹´ãæãæ¥ãå°æ¶ãååç§å¼ãè¿è¯´æä¸åºä½¿ç¨å°äº6å符çå符串ãä¾å¦ï¼å¦æä½ æå®'9903'ï¼è®¤ä¸ºå®è¡¨ç¤º1999å¹´3æï¼MySQLå°å¨ä½ çè¡¨å æå ¥ä¸ä¸ªâé¶âæ¥æå¼ãè¿æ¯å 为年åæå¼æ¯99å03ï¼ä½æ¥é¨åå®å ¨ä¸¢å¤±ï¼å æ¤è¯¥å¼ä¸æ¯ä¸ä¸ªåæ³çæ¥æã使¯ï¼å¯ä»¥ææ¾æå®ä¸ä¸ªé¶å¼æ¥ä»£è¡¨ç¼ºå°çæææ¥é¨åãä¾å¦ï¼å¯ä»¥ä½¿ç¨'990300'æ¥æå ¥å¼'1999-03-00'ã å¨ä¸å®ç¨åº¦ä¸ï¼å¯ä»¥å°ä¸ä¸ªæ¥æç±»åçå¼åé ç»ä¸ä¸ªä¸åçæ¥æç±»åã使¯ï¼å¼å¯è½ä¼æ´æ¹æä¸¢å¤±ä¸äºä¿¡æ¯ï¼ · å¦æä½ ä¸ºä¸ä¸ªDATETIMEæTIMESTAMP对象åé ä¸ä¸ªDATEå¼ï¼ç»æå¼çæ¶é´é¨å被设置为'00:00:00'ï¼å 为DATE弿ªå 嫿¶é´ä¿¡æ¯ã · å¦æä½ ä¸ºä¸ä¸ªDATE对象åé ä¸ä¸ªDATETIMEæTIMESTAMPå¼ï¼ç»æå¼çæ¶é´é¨å被å é¤ï¼å 为DATE弿ªå 嫿¶é´ä¿¡æ¯ã · è®°ä½å°½ç®¡å¯ä»¥ä½¿ç¨ç¸åçæ ¼å¼æå®DATETIMEãDATEåTIMESTAMPå¼ï¼ä¸åç±»åçå¼çèå´å´ä¸åãä¾å¦ï¼TIMESTAMPå¼ä¸è½æ©äº1970ææäº2037ãè¿è¯´æä¸ä¸ªæ¥æï¼ä¾å¦'1968-01-01'ï¼è½ç¶å¯¹äºDATETIMEæDATE弿¯ææçï¼ä½å¯¹äºTIMESTAMPå¼å´æ æï¼å¦æåé ç»è¿æ ·ä¸ä¸ªå¯¹è±¡å°è¢«è½¬æ¢ä¸º0ã 彿宿¥æå¼æ¶è¯·æ³¨ææäºç¼ºé·ï¼ · æå®ä¸ºå符串çå¼å 许çéä¸¥æ ¼æ ¼å¼å¯è½ä¼æ¬ºéªãä¾å¦ï¼å¼'10:11:12'ç±äºâ:âé´å²ç¬¦çä¸å»å¯è½è±¡æ¶é´å¼ï¼ä½å¦æç¨äºæ¥æä¸ä¸æå¼å被解é为年'2010-11-12'ãå¼'10:45:15'被转æ¢ä¸º'0000-00-00'å 为'45'䏿¯åæ³æã · å¨éä¸¥æ ¼æ¨¡å¼ï¼MySQLæå¡å¨åªå¯¹æ¥æçåæ³æ§è¿è¡åºæ¬æ£æ¥ï¼å¹´ãæåæ¥çèå´å嫿¯1000å°9999ã00å°12å00å°31ãä»»ä½å å«è¶ åºè¿äºèå´çé¨åçæ¥æè¢«è½¬æ¢æ'0000-00-00'ã请注æä»ç¶å è®¸ä½ ä¿åéæ³æ¥æï¼ä¾å¦'2002-04-31'ãè¦æ³ç¡®ä¿ä¸ä½¿ç¨ä¸¥æ ¼æ¨¡å¼æ¶æ¥æææï¼åºæ£æ¥åºç¨ç¨åºã å¨ä¸¥æ ¼æ¨¡å¼ï¼éæ³æ¥æä¸è¢«æ¥åï¼å¹¶ä¸ä¸è½¬æ¢ã 详ç»ä¿¡æ¯åè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã · å å«ä¸¤ä½å¹´å¼çæ¥æä¼ä»¤äººæ¨¡ç³ï¼å 为ä¸çºªä¸ç¥éãMySQL使ç¨ä»¥ä¸è§åè§£é两ä½å¹´å¼ï¼ o 00-69èå´çå¹´å¼è½¬æ¢ä¸º2000-2069ã o 70-99èå´çå¹´å¼è½¬æ¢ä¸º1970-1999ã æ³¨éï¼å¨æ§çæ¬çMySQLä¸(4.1ä¹å)ï¼TIMESTAMPåç±»åç屿§å¨è®¸å¤æ¹é¢äºæ¬èææè¿°ç大大ä¸åãå¦æä½ éè¦å¯¹æ§çTIMESTAMPæ°æ®è¿è¡è½¬å以便å¨MySQL 5.1ä¸å·¥ä½ï¼è¯¦æ 请åè§MySQL 4.1 åèæåã TIMESTAMPåçæ¾ç¤ºæ ¼å¼ä¸DATETIMEåç¸åãæ¢å¥è¯è¯´ï¼æ¾ç¤ºå®½åº¦åºå®å¨19å符ï¼å¹¶ä¸æ ¼å¼ä¸ºYYYY-MM-DD HH:MM:SSã MySQLæå¡å¨ä¹å¯ä»¥ä»¥MAXDB模å¼è¿è¡ã彿å¡å¨ä»¥è¯¥æ¨¡å¼è¿è¡æ¶ï¼TIMESTAMPä¸DATETIMEç¸çãä¹å°±æ¯è¯´ï¼å¦æåå»ºè¡¨æ¶æå¡å¨ä»¥MAXDB模å¼è¿è¡ï¼TIMESTAMPåå建为DATETIMEåãç»ææ¯ï¼è¯¥å使ç¨DATETIMEæ¾ç¤ºæ ¼å¼ï¼æç¸åçå¼èå´ï¼å¹¶ä¸æ²¡æèªå¨å¯¹å½åçæ¥æåæ¶é´è¿è¡åå§åææ´æ°ã è¦æ³å¯ç¨MAXDB模å¼ï¼å¨å¯å¨æå¡å¨æ¶ä½¿ç¨--sql-mode=MAXDBæå¡å¨é项æå¨è¿è¡æ¶éè¿è®¾ç½®å ¨å±sql_modeåéå°SQLæå¡å¨æ¨¡å¼è®¾ç½®ä¸ºMAXDBï¼ mysql> SET GLOBAL sql_mode=MAXDBï¼ å®¢æ·ç«¯å¯ä»¥æç §ä¸é¢æ¹æ³è®©æå¡å¨ä¸ºå®çè¿æ¥ä»¥MAXDB模å¼è¿è¡ï¼ mysql> SET SESSION sql_mode=MAXDB;
MySQL䏿¥å卿¥ææåå æ¬ä¸ä¸ªé¶æå å«éæ³æ¥æå¼çæ¶é´æ³å¼ã该è§åçå¯ä¸ä¾å¤æ¯ç¹æ®å¼'0000-00-00 00:00:00'ã ä½ å¯ä»¥é常çµä¾¿å°ç¡®å®ä»ä¹æ¶ååå§ååæ´æ°TIMESTAMPå对åªäºåè¿è¡åå§ååæ´æ°ï¼ · ä½ å¯ä»¥å°å½åçæ¶é´æ³æå®ä¸ºé»è®¤å¼åèªå¨æ´æ°çå¼ãä½åªè½éæ©ä¸ä¸ªï¼æè 两è é½ä¸éã(ä¸å¯è½ä¸ä¸ªåéæ©ä¸ä¸ªè¡ä¸ºèå¦ä¸ä¸ªåéæ©å¦ä¸ä¸ªè¡ä¸ºï¼ã · ä½ å¯ä»¥æå®åªä¸ªTIMESTAMPåèªå¨åå§åææ´æ°ä¸ºå½åçæ¥æåæ¶é´ãä¸åéè¦ä¸ºç¬¬1个TIMESTAMPåã 请注æä¸é¢è®¨è®ºæä¿¡æ¯åªéç¨äºåå»ºæ¶æªå¯ç¨MAXDB模å¼ç表çTIMESTAMPåã(å¦ä¸æè¿°ï¼MAXDB模å¼ä½¿åå建为DATETIMEåï¼ãæ§å¶TIMESTAMPåçåå§ååæ´æ°çè§åå¦ä¸æç¤ºï¼ · 妿ä¸ä¸ªè¡¨å ç第1个TIMESTAMPåæå®ä¸ºä¸ä¸ªDEFAULTå¼ï¼åä¸è½å¿½ç¥ã é»è®¤å¼å¯ä»¥ä¸ºCURRENT_TIMESTAMPæå¸¸éæ¥æåæ¶é´å¼ã · DEFAULT NULLä¸ç¬¬1个TIMESTAMP åçDEFAULT CURRENT_TIMESTAMPç¸åã对äºå ¶å®TIMESTAMPåï¼DEFAULT NULL被è§ä¸ºDEFAULT 0ã · 表å çä»»ä½ä¸ä¸ªTIMESTAMPåå¯ä»¥è®¾ç½®ä¸ºèªå¨åå§å为å½åæ¶é´æ³å/ææ´æ°ã · å¨CREATE TABLEè¯å¥ä¸ï¼å¯ä»¥ç¨ä¸é¢çä»»ä½ä¸ç§æ¹å¼å£°æç¬¬1个TIMESTAMPåï¼ o ç¨DEFAULT CURRENT_TIMESTAMPåON UPDATE CURRENT_TIMESTAMPåå¥ï¼å为é»è®¤å¼ä½¿ç¨å½åçæ¶é´æ³ï¼å¹¶ä¸èªå¨æ´æ°ã o ä¸ä½¿ç¨DEFAULTæON UPDATEåå¥ï¼ä¸DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMPç¸åã o ç¨DEFAULT CURRENT_TIMESTAMPåå¥ä¸ç¨ON UPDATEåå¥ï¼å为é»è®¤å¼ä½¿ç¨å½åçæ¶é´æ³ä½æ¯ä¸èªå¨æ´æ°ã o ä¸ç¨DEFAULTåå¥ä½ç¨ON UPDATE CURRENT_TIMESTAMPåå¥ï¼åæé»è®¤å¼0å¹¶èªå¨æ´æ°ã o ç¨å¸¸éDEFAULTå¼ï¼åæç»åºç é»è®¤å¼ã妿åæä¸ä¸ªON UPDATE CURRENT_TIMESTAMPåå¥ï¼å®èªå¨æ´æ°ï¼å¦åä¸ã æ¢å¥è¯è¯´ï¼ä½ å¯ä»¥ä¸ºåå§å¼åèªå¨æ´æ°çå¼ä½¿ç¨å½åçæ¶é´æ³ï¼æè å ¶ä¸ä¸ä¸ªä½¿ç¨ï¼æè 两个çä¸ä½¿ç¨ã(ä¾å¦ï¼ä½ å¯ä»¥æå®ON UPDATEæ¥å¯ç¨èªå¨æ´æ°èä¸è®©åèªå¨åå§åï¼ã · å¨DEFAULTåON UPDATEåå¥ä¸å¯ä»¥ä½¿ç¨CURRENT_TIMESTAMPãCURRENT_TIMESTAMP()æè NOW()ãå®ä»¬åå ·æç¸åçææã ä¸¤ä¸ªå±æ§ç顺åºå¹¶ä¸éè¦ã妿ä¸ä¸ªTIMESTAMPååæ¶æå®äºDEFAULTåON UPDATEï¼ä»»ä½ä¸ä¸ªå¯ä»¥å¨å¦ä¸ä¸ªçåé¢ã ä¾åï¼ä¸é¢è¿äºè¯å¥æ¯çæçï¼ CREATE TABLE t (ts TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
DEFAULT CURRENT_TIMESTAMP);· è¦ä¸ºTIMESTAMPåè䏿¯ç¬¬1åæå®èªå¨é»è®¤ææ´æ°ï¼å¿ é¡»éè¿å°ç¬¬1个TIMESTAMPåæ¾å¼åé ä¸ä¸ªå¸¸éDEFAULT弿¥ç¦ç¨èªå¨åå§ååæ´æ°ã(ä¾å¦ï¼DEFAULT 0æDEFAULT'2003-01-01 00:00:00')ãç¶åï¼å¯¹äºå ¶å®TIMESTAMPåï¼è§åä¸ç¬¬1个TIMESTAMPåç¸åï¼ä¾å¤æ 嵿¯ä¸è½å¿½ç¥DEFAULTåON UPDATEåå¥ãå¦æè¿æ ·åï¼åä¸ä¼èªå¨è¿è¡åå§åææ´æ°ã ä¾å¦ï¼ä¸é¢è¿äºè¯å¥æ¯çæçï¼ CREATE TABLE t (
ts1 TIMESTAMP DEFAULT 0,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (
ts1 TIMESTAMP DEFAULT 0,
ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
DEFAULT CURRENT_TIMESTAMP);å¯ä»¥å¯¹æ¯ä¸ªè¿æ¥è®¾ç½®å½åçæ¶åºï¼ç¸å ³æè¿°åè§5.10.8èï¼âMySQLæå¡å¨æ¶åºæ¯æâãTIMESTAMPå¼ä»¥UTCæ ¼å¼ä¿åï¼å卿¶å¯¹å½åçæ¶åºè¿è¡è½¬æ¢ï¼æ£ç´¢æ¶å转æ¢åå½åçæ¶åºãåªè¦æ¶åºè®¾å®å¼ä¸ºå¸¸éï¼ä¾¿å¯ä»¥å¾å°ä¿åæ¶çå¼ã妿ä¿åä¸ä¸ªTIMESTAMPå¼ï¼åºæ´æ¹æ¶åºç¶åæ£ç´¢è¯¥å¼ï¼å®ä¸ä½ ä¿åçå¼ä¸åãè¿æ¯å 为å¨ä¸¤ä¸ªæ¹åç转æ¢ä¸æ²¡æä½¿ç¨ç¸åçæ¶åºãå½åçæ¶åºå¯ä»¥ç¨ä½time_zoneç³»ç»åéçå¼ã å¯ä»¥å¨TIMESTAMPåçå®ä¹ä¸å æ¬NULL屿§ä»¥å 许åå å«NULLå¼ãä¾å¦ï¼ CREATE TABLE t
(
ts1 TIMESTAMP NULL DEFAULT NULL,
ts2 TIMESTAMP NULL DEFAULT 0,
ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
);å¦ææªæå®NULL屿§ï¼å°å设置为NULL设置åä¼å°å®è®¾ç½®ä¸ºå½åçæ¶é´æ³ã请注æå 许NULLå¼çTIMESTAMPåä¸ä¼éç¨å½åçæ¶é´æ³ï¼é¤éè¦ä¹å ¶ é»è®¤å¼å®ä¹ä¸ºCURRENT_TIMESTAMPï¼æè NOW()æCURRENT_TIMESTAMP被æå ¥å°è¯¥åå ãæ¢å¥è¯è¯´ï¼åªæä½¿ç¨å¦ä¸å®ä¹å建ï¼å®ä¹ä¸º NULLçTIMESTAMPåæä¼èªå¨æ´æ°ï¼ CREATE TABLE t (ts NULLDEFAULT CURRENT_TIMESTAMP);
å¦å-ä¹å°±æ¯è¯´ï¼å¦æä½¿ç¨NULLè䏿¯DEFAULT TIMESTAMPæ¥å®ä¹TIMESTAMPåï¼å¦ä¸æç¤º... CREATE TABLE t1 (ts NULL DEFAULT NULL);
CREATE TABLE t2 (ts NULL DEFAULT '0000-00-00 00:00:00');...åå¿ é¡»æ¾å¼æå ¥ä¸ä¸ªå¯¹åºå½åæ¥æåæ¶é´çå¼ãä¾å¦ï¼ INSERT INTO t1 VALUES (NOW());
INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);MySQL以'HH:MM:SS'æ ¼å¼æ£ç´¢åæ¾ç¤ºTIMEå¼(æå¯¹äºå¤§çå°æ¶å¼éç¨'HHH:MM:SS'æ ¼å¼)ãTIMEå¼çèå´å¯ä»¥ä»'-838:59:59'å°'838:59:59'ãå°æ¶é¨åä¼å æ¤å¤§çåå æ¯TIMEç±»åä¸ä» å¯ä»¥ç¨äºè¡¨ç¤ºä¸å¤©çæ¶é´(å¿ é¡»å°äº24å°æ¶)ï¼è¿å¯è½ä¸ºæä¸ªäºä»¶è¿å»çæ¶é´æä¸¤ä¸ªäºä»¶ä¹é´çæ¶é´é´é(å¯ä»¥å¤§äº24å°æ¶ï¼æè çè³ä¸ºè´)ã ä½ å¯ä»¥ç¨åç§æ ¼å¼æå®TIMEå¼ï¼ · 'D HH:MM:SS.fraction'æ ¼å¼çå符串ãè¿å¯ä»¥ä½¿ç¨ä¸é¢ä»»ä½ä¸ç§âéä¸¥æ ¼âè¯æ³ï¼'HH:MM:SS.fraction'ã'HH:MM:SS'ã'HH:MM'ã'D HH:MM:SS'ã'D HH:MM'ã'D HH'æ'SS'ãè¿éD表示æ¥ï¼å¯ä»¥å0å°34ä¹é´çå¼ã请注æMySQLè¿ä¸ä¿ååæ°ã · 'HHMMSS'æ ¼å¼ç没æé´å²ç¬¦çå符串ï¼å宿¯ææä¹çæ¶é´ãä¾å¦ï¼'101112'被ç解为'10:11:12'ï¼ä½'109712'æ¯ä¸åæ³ç(宿ä¸ä¸ªæ²¡ææä¹çåéé¨å)ï¼å°å为'00:00:00'ã · HHMMSSæ ¼å¼çæ°å¼ï¼å宿¯ææä¹çæ¶é´ãä¾å¦ï¼101112被ç解为'10:11:12'ãä¸é¢æ ¼å¼ä¹å¯ä»¥çè§£ï¼SSãMMSSãHHMMSSãHHMMSS.fractionã请注æMySQLè¿ä¸ä¿ååæ°ã · 彿°è¿åçç»æï¼å ¶å¼éåTIMEä¸ä¸æï¼ä¾å¦CURRENT_TIMEã å¯¹äºæå®ä¸ºå æ¬æ¶é´é¨åé´å²ç¬¦çå符串çTIMEå¼ï¼å¦ææ¶ãåæè ç§å¼å°äº10ï¼åä¸éè¦æå®ä¸¤ä½æ°ã'8:3:2'ä¸'08:03:02'ç¸åã 为TIMEååé ç®å弿¶åºæ³¨æã没æåå·ï¼MySQLè§£é弿¶å宿å³è¾¹ç两ä½è¡¨ç¤ºç§ã(MySQLè§£éTIMEå¼ä¸ºè¿å»çæ¶é´è䏿¯å½å¤©çæ¶é´ï¼ãä¾å¦ï¼ä½ å¯è½è®¤ä¸º'1112'å1112表示'11:12:00'(11ç¹è¿12å)ï¼ä½MySQLå°å®ä»¬è§£é为'00:11:12'(11åï¼12 ç§)ãåæ ·ï¼'12'å12 被解é为 '00:00:12'ãç¸åï¼TIMEå¼ä¸ä½¿ç¨åå·åè¯å®è¢«çä½å½å¤©çæ¶é´ãä¹å°±æ¯è¯´ï¼'11:12'表示'11:12:00'ï¼è䏿¯'00:11:12'ã è¶ åºTIMEèå´ä½åæ³çå¼è¢«è£ä¸ºèå´ææ¥è¿ç端ç¹ãä¾å¦ï¼'-850:00:00'å'850:00:00'被转æ¢ä¸º'-838:59:59'å'838:59:59'ã æ æTIMEå¼è¢«è½¬æ¢ä¸º'00:00:00'ã请注æç±äº'00:00:00'æ¬èº«æ¯ä¸ä¸ªåæ³TIMEå¼ï¼åªä»è¡¨å ä¿åçä¸ä¸ª'00:00:00'å¼è¿ä¸è½è¯´åºåæ¥ç弿¯ '00:00:00'è¿æ¯ä¸åæ³çå¼ã 11.3.3. YEARç±»åYEARç±»åæ¯ä¸ä¸ªååèç±»åç¨äºè¡¨ç¤ºå¹´ã MySQL以YYYYæ ¼å¼æ£ç´¢åæ¾ç¤ºYEARå¼ãèå´æ¯1901å°2155ã å¯ä»¥æå®åç§æ ¼å¼çYEARå¼ï¼ · åä½å符串ï¼èå´ä¸º'1901'å°'2155'ã · å使°åï¼èå´ä¸º1901å°2155ã · 两ä½å符串ï¼èå´ä¸º'00'å°'99'ã'00'å°'69'å'70'å°'99'èå´çå¼è¢«è½¬æ¢ä¸º2000å°2069å1970å°1999èå´çYEARå¼ã · 䏤使´æ°ï¼èå´ä¸º1å°99ã1å°69å70å°99èå´çå¼è¢«è½¬æ¢ä¸º2001å°2069å1970å°1999èå´çYEARå¼ã请注æä¸¤ä½æ´æ°èå´ä¸ä¸¤ä½å符串èå´ç¨æä¸åï¼å ä¸ºä½ ä¸è½ç´æ¥å°é¶æå®ä¸ºæ°åå¹¶å°å®è§£é为2000ãä½ å¿ é¡»å°å®æå®ä¸ºä¸ä¸ªå符串'0'æ'00'æå®è¢«è§£é为0000ã · 彿°è¿åçç»æï¼å ¶å¼éåYEARä¸ä¸æï¼ä¾å¦NOW()ã éæ³YEARå¼è¢«è½¬æ¢ä¸º0000ã 11.3.4. Y2Käºå®åæ¥æç±»åMySQLæ¬èº«å¯¹äº2000å¹´(Y2K)æ¯å®å ¨ç(åè§1.4.5èï¼â2000å¹´å ¼å®¹æ§â)ï¼ä½è¾å ¥ç»MySQLçå¼å¯è½ä¸å®å ¨ãä»»ä½å å«ä¸¤ä½å¹´å¼çè¾å ¥é½ä¼ä»¤äººæ¨¡ç³ï¼å 为ä¸çºªä¸ç¥éãè¿äºå¼å¿ 须解é为åä½å½¢å¼ï¼å 为MySQLå é¨ä½¿ç¨å使¥ä¿åå¹´ã 对äºDATETIMEãDATEãTIMESTAMPåYEARç±»åï¼MySQL使ç¨ä»¥ä¸è§åè§£é嫿¨¡ç³å¹´å¼çæ¥æï¼ Â· 00-69èå´çå¹´å¼è½¬æ¢ä¸º2000-2069ã · 70-99èå´çå¹´å¼è½¬æ¢ä¸º1970-1999ã 请记ä½è¿äºè§ååªæ¯åççæµæ°æ®å¼è¡¨ç¤ºä»ä¹ã妿MySQL使ç¨çå¯åä¸è½äº§çæ£ç¡®çå¼ï¼ä½ åºæä¾å å«åä½å¹´å¼çç¡®åè¾å ¥ã ORDER BYå¯ä»¥æ£ç¡®æåºæä¸¤ä½å¹´çTIMESTAMPæYEARå¼ã é¨å彿°å¦MIN()åMAX()å°TIMESTAMPæYEAR转æ¢ä¸ºä¸ä¸ªæ°åãè¿è¯´æä½¿ç¨æä¸¤ä½å¹´å¼çå¼ï¼è¿äºå½æ°ä¸è½å·¥ä½æ£ç¡®ãå¨è¿ç§æ åµä¸çä¿®å¤æ¹æ³æ¯å°TIMESTAMPæYEAR转æ¢ä¸ºåä½å¹´æ ¼å¼æä½¿ç¨MIN(DATE_ADD(TIMESTAMP,INTERVAL 0 DAYS))ã CHARåVARCHARç±»å类似ï¼ä½å®ä»¬ä¿ååæ£ç´¢çæ¹å¼ä¸åãå®ä»¬çæå¤§é¿åº¦åæ¯å¦å°¾é¨ç©ºæ ¼è¢«ä¿ççæ¹é¢ä¹ä¸åãå¨å卿æ£ç´¢è¿ç¨ä¸ä¸è¿è¡å¤§å°å转æ¢ã CHARåVARCHARç±»å声æçé¿åº¦è¡¨ç¤ºä½ æ³è¦ä¿åçæå¤§å符æ°ãä¾å¦ï¼CHAR(30)å¯ä»¥å ç¨30个å符ã CHARåçé¿åº¦åºå®ä¸ºå建表æ¶å£°æçé¿åº¦ãé¿åº¦å¯ä»¥ä¸ºä»0å°255çä»»ä½å¼ãå½ä¿åCHAR弿¶ï¼å¨å®ä»¬çå³è¾¹å¡«å ç©ºæ ¼ä»¥è¾¾å°æå®çé¿åº¦ã彿£ç´¢å°CHAR弿¶ï¼å°¾é¨çç©ºæ ¼è¢«å 餿ãå¨å卿æ£ç´¢è¿ç¨ä¸ä¸è¿è¡å¤§å°å转æ¢ã VARCHARåä¸çå¼ä¸ºå¯åé¿å符串ãé¿åº¦å¯ä»¥æå®ä¸º0å°65,535ä¹é´çå¼ã(VARCHARçæå¤§ææé¿åº¦ç±æå¤§è¡å¤§å°å使ç¨çå符éç¡®å®ãæ´ä½æå¤§é¿åº¦æ¯65,532åèï¼ã åCHAR对æ¯ï¼VARCHARå¼ä¿åæ¶åªä¿åéè¦çå符æ°ï¼å¦å ä¸ä¸ªåèæ¥è®°å½é¿åº¦(妿å声æçé¿åº¦è¶ è¿255ï¼å使ç¨ä¸¤ä¸ªåè)ã VARCHARå¼ä¿åæ¶ä¸è¿è¡å¡«å ãå½å¼ä¿ååæ£ç´¢æ¶å°¾é¨çç©ºæ ¼ä»ä¿çï¼ç¬¦åæ åSQLã 妿åé ç»CHARæVARCHARåçå¼è¶ è¿åçæå¤§é¿åº¦ï¼å对å¼è¿è¡è£åªä»¥ä½¿å ¶éåãå¦æè¢«è£æçåç¬¦ä¸æ¯ç©ºæ ¼ï¼åä¼äº§ç䏿¡è¦åã妿è£åªéç©ºæ ¼å符ï¼åä¼é æé误(è䏿¯è¦å)å¹¶éè¿ä½¿ç¨ä¸¥æ ¼SQL模å¼ç¦ç¨å¼çæå ¥ãåè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã ä¸é¢ç表æ¾ç¤ºäºå°åç§å符串å¼ä¿åå°CHAR(4)åVARCHAR(4)ååçç»æï¼è¯´æäºCHARåVARCHARä¹é´çå·®å«ï¼
请注æä¸è¡¨ä¸æåä¸è¡çå¼åªéç¨ä¸ä½¿ç¨ä¸¥æ ¼æ¨¡å¼æ¶ï¼å¦æMySQLè¿è¡å¨ä¸¥æ ¼æ¨¡å¼ï¼è¶ è¿åé¿åº¦ä¸çå¼ä¸ä¿åï¼å¹¶ä¸ä¼åºç°é误ã ä»CHAR(4)åVARCHAR(4)åæ£ç´¢çå¼å¹¶ä¸æ»æ¯ç¸åï¼å 为æ£ç´¢æ¶ä»CHARåå é¤äºå°¾é¨çç©ºæ ¼ãéè¿ä¸é¢çä¾å说æè¯¥å·®å«ï¼ mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4)); Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO vc VALUES ('ab ', 'ab '); Query OK, 1 row affected (0.00 sec)
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc; +----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab + | ab+ |
+----------------+----------------+
1 row in set (0.00 sec)æ ¹æ®åé ç»åçåç¬¦éæ ¡å¯¹è§å对CHARåVARCHARåä¸çå¼è¿è¡æåºåæ¯è¾ã è¯·æ³¨æææMySQLæ ¡å¯¹è§åå±äºPADSPACEç±»ãè¿è¯´æå¨MySQLä¸çææCHARåVARCHAR弿¯è¾æ¶ä¸éè¦èèä»»ä½å°¾é¨ç©ºæ ¼ãä¾å¦ï¼ mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10)); Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO names VALUES ('Monty ', 'Monty '); Query OK, 1 row affected (0.00 sec)
mysql> SELECT myname = 'Monty ', yourname = 'Monty ' FROM names; +--------------------+----------------------+
| myname = 'Monty ' | yourname = 'Monty ' |
+--------------------+----------------------+
| 1 | 1 |
+--------------------+----------------------+
1 row in set (0.00 sec)è¯·æ³¨æææMySQLçæ¬å妿¤ï¼å¹¶ä¸å®ä¸åSQLæå¡å¨æ¨¡å¼çå½±åã 对äºå°¾é¨å¡«å å符被è£åªæææ¯è¾æ¶å°å®ä»¬å¿½è§æçæ å½¢ï¼å¦æåçç´¢å¼éè¦å¯ä¸çå¼ï¼å¨åå æå ¥ä¸ä¸ªåªæ¯å¡«å å符æ°ä¸åçå¼å°ä¼é æå¤å¶é®å¼é误ã CHAR BYTEæ¯CHAR BINARYçå«åãè¿æ¯ä¸ºäºä¿è¯å ¼å®¹æ§ã ASCII屿§ä¸ºCHARååé latin1å符éãUNICODE屿§åé ucs2å符éã BINARYåVARBINARY类类似äºCHARåVARCHARï¼ä¸åçæ¯å®ä»¬å å«äºè¿å¶å符串èä¸è¦éäºè¿å¶å符串ãä¹å°±æ¯è¯´ï¼å®ä»¬å å«åèå符串è䏿¯å符å符串ãè¿è¯´æå®ä»¬æ²¡æå符éï¼å¹¶ä¸æåºåæ¯è¾åºäºåå¼åèçæ°å¼å¼ã BINARYåVARBINARYå 许çæå¤§é¿åº¦ä¸æ ·ï¼å¦åCHARåVARCHARï¼ä¸åçæ¯BINARYåVARBINARYçé¿åº¦æ¯åèé¿åº¦è䏿¯å符é¿åº¦ã BINARYåVARBINARYæ°æ®ç±»åä¸åäºCHAR BINARYåVARCHAR BINARYæ°æ®ç±»åã对äºåä¸ç§ç±»åï¼BINARY屿§ä¸ä¼å°åè§ä¸ºäºè¿å¶å符串åãç¸åï¼å®è´ä½¿ä½¿ç¨åå符éçäºå æ ¡å¯¹è§åï¼å¹¶ä¸åèªèº«å å«éäºè¿å¶å符å符串è䏿¯äºè¿å¶åèå符串ãä¾å¦CHAR(5) BINARY被è§ä¸ºCHAR(5) CHARACTER SET latin1 COLLATE latin1_binï¼åå®é»è®¤åç¬¦éæ¯latin1ãè¿ä¸åäºBINARY(5)ï¼å®ä¿å5åèäºè¿å¶åç¬¦ä¸²ï¼æ²¡æåç¬¦éæ æ ¡å¯¹è§åã å½ä¿åBINARY弿¶ï¼å¨å®ä»¬å³è¾¹å¡«å å¼ä»¥è¾¾å°æå®é¿åº¦ãå¡«å 弿¯0x00(é¶åè)ãæå ¥å¼æ¶å¨å³ä¾§æ·»å 0x00 onï¼å¹¶ä¸éæ©æ¶ä¸å é¤å°¾é¨çåèãæ¯è¾æ¶ææåèå¾éè¦ï¼å æ¬ORDER BYåDISTINCTæä½ãæ¯è¾æ¶0x00åèåç©ºæ ¼æ¯ä¸åçï¼0x00<ç©ºæ ¼ã ä¾å¦ï¼å¯¹äºä¸ä¸ªBINARY(3)åï¼å½æå ¥æ¶ 'a' å为 'a \0'ã'a\0'æå ¥æ¶å为'a\0\0'ãå½éæ©æ¶ä¸¤ä¸ªæå ¥çå¼å䏿´æ¹ã 对äºVARBINARYï¼æå ¥æ¶ä¸å¡«å å符ï¼éæ©æ¶ä¸è£åªåèãæ¯è¾æ¶ææåèå¾éè¦ï¼å æ¬ORDER BYåDISTINCTæä½ãæ¯è¾æ¶0x00åèåç©ºæ ¼æ¯ä¸åçï¼0x00<ç©ºæ ¼ã 对äºå°¾é¨å¡«å å符被è£åªæææ¯è¾æ¶å°å®ä»¬å¿½è§æçæ å½¢ï¼å¦æåçç´¢å¼éè¦å¯ä¸çå¼ï¼å¨åå æå ¥ä¸ä¸ªåªæ¯å¡«å å符æ°ä¸åçå¼å°ä¼é æå¤å¶é®å¼é误ã å¦æä½ è®¡å使ç¨è¿äºæ°æ®ç±»åæ¥ä¿åäºè¿å¶æ°æ®å¹¶ä¸éè¦æ£ç´¢çå¼ä¸ä¿åçå¼å®å ¨ç¸åï¼åºèèåé¢æè¿°çå¡«å åè£åªç¹å¾ãä¸é¢çä¾å说æäºç¨0x00å¡«å çBINARYå¼å¦ä½å½±åå弿¯è¾ï¼ mysql> CREATE TABLE t (c BINARY(3)); Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t SET c = 'a'; Query OK, 1 row affected (0.01 sec)
mysql> SELECT HEX(c), c = 'a', c = 'a\0\0' from t; +--------+---------+-------------+
| HEX(c) | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set (0.09 sec)妿æ£ç´¢çå¼å¿ 须䏿å®è¿è¡åå¨è没æå¡«å çå¼ç¸åï¼æå¥½ä½¿ç¨BLOBæ°æ®ç±»åã å建表æ¶ï¼MySQLå¯ä»¥é»é»æ´æ¹BINARYæVARBINARYåçç±»åãåè§13.1.5.1èï¼âæ²å¯çåè§æ ¼åæ´âã BLOBæ¯ä¸ä¸ªäºè¿å¶å¤§å¯¹è±¡ï¼å¯ä»¥å®¹çº³å¯åæ°éçæ°æ®ãæ4ç§BLOBç±»åï¼TINYBLOBãBLOBãMEDIUMBLOBåLONGBLOBãå®ä»¬åªæ¯å¯å®¹çº³å¼çæå¤§é¿åº¦ä¸åã æ4ç§TEXTç±»åï¼TINYTEXTãTEXTãMEDIUMTEXTåLONGTEXTãè¿äºå¯¹åº4ç§BLOBç±»åï¼æç¸åçæå¤§é¿åº¦ååå¨éæ±ã åè§11.5èï¼âåç±»ååå¨éæ±âã BLOB å被è§ä¸ºäºè¿å¶å符串(åèå符串)ãTEXTå被è§ä¸ºéäºè¿å¶å符串(å符å符串)ãBLOBåæ²¡æå符éï¼å¹¶ä¸æåºåæ¯è¾åºäºåå¼åèçæ°å¼å¼ãTEXTåæä¸ä¸ªå符éï¼å¹¶ä¸æ ¹æ®å符éç æ ¡å¯¹è§å对å¼è¿è¡æåºåæ¯è¾ã å¨TEXTæBLOBåçå卿æ£ç´¢è¿ç¨ä¸ï¼ä¸åå¨å¤§å°å转æ¢ã 彿ªè¿è¡å¨ä¸¥æ ¼æ¨¡å¼æ¶ï¼å¦æä½ 为BLOBæTEXTååé ä¸ä¸ªè¶ è¿è¯¥åç±»åçæå¤§é¿åº¦çå¼å¼ï¼å¼è¢«æªå以ä¿è¯éåãå¦ææªæçåç¬¦ä¸æ¯ç©ºæ ¼ï¼å°ä¼äº§ç䏿¡è¦åã使ç¨ä¸¥æ ¼SQL模å¼ï¼ä¼äº§çé误ï¼å¹¶ä¸å¼å°è¢«æç»è䏿¯æªåå¹¶ç»åºè¦åãåè§5.3.2èï¼âSQLæå¡å¨æ¨¡å¼âã å¨å¤§å¤æ°æ¹é¢ï¼å¯ä»¥å°BLOBåè§ä¸ºè½å¤è¶³å¤å¤§çVARBINARYåãåæ ·ï¼å¯ä»¥å°TEXTåè§ä¸ºVARCHARåãBLOBåTEXTå¨ä»¥ä¸å 个æ¹é¢ä¸åäºVARBINARYåVARCHARï¼ Â· å½ä¿åææ£ç´¢BLOBåTEXTåç弿¶ä¸å é¤å°¾é¨ç©ºæ ¼ã(è¿ä¸VARBINARYåVARCHARåç¸åï¼ã è¯·æ³¨ææ¯è¾æ¶å°ç¨ç©ºæ ¼å¯¹TEXTè¿è¡æ©å 以é忝è¾çå¯¹è±¡ï¼æ£å¦CHARåVARCHARã · 对äºBLOBåTEXTåçç´¢å¼ï¼å¿ é¡»æå®ç´¢å¼åç¼çé¿åº¦ã对äºCHARåVARCHARï¼åç¼é¿åº¦æ¯å¯éçãåè§7.4.3èï¼âåç´¢å¼âã · BLOBåTEXTåä¸è½æ é»è®¤å¼ã LONGåLONG VARCHAR对åºMEDIUMTEXTæ°æ®ç±»åãè¿æ¯ä¸ºäºä¿è¯å ¼å®¹æ§ã妿TEXTåç±»å使ç¨BINARY屿§ï¼å°ä¸ºååé åå符éçäºå æ ¡å¯¹è§åã MySQLè¿æ¥ç¨åº/ODBCå°BLOBå¼å®ä¹ä¸ºLONGVARBINARYï¼å°TEXTå¼å®ä¹ä¸ºLONGVARCHARã ç±äºBLOBåTEXTå¼å¯è½ä¼é常é¿ï¼ä½¿ç¨å®ä»¬æ¶å¯è½éå°ä¸äºçº¦æï¼ · å½æåºæ¶åªä½¿ç¨è¯¥åçåmax_sort_length个åèãmax_sort_lengthç é»è®¤å¼æ¯1024ï¼è¯¥å¼å¯ä»¥å¨å¯å¨mysqldæå¡å¨æ¶ä½¿ç¨--max_sort_lengthé项è¿è¡æ´æ¹ãåè§5.3.3èï¼âæå¡å¨ç³»ç»åéâã è¿è¡æ¶å¢å max_sort_lengthçå¼å¯ä»¥å¨æåºæç»åæ¶ä½¿æ´å¤çåèææä¹ãä»»ä½å®¢æ·ç«¯å¯ä»¥æ´æ¹å ¶ä¼è¯max_sort_lengthåéçå¼ï¼ mysql> SET max_sort_length = 2000; mysql> SELECT id, comment FROM tbl_name -> ORDER BY comment; å½ä½ æ³è¦ä½¿è¶ è¿max_sort_lengthçåèææä¹ï¼å¯¹å«é¿å¼çBLOBæTEXTå使ç¨GROUP BYæORDER BYçå¦ä¸ç§æ¹å¼æ¯å°åå¼è½¬æ¢ä¸ºåºå®é¿åº¦çå¯¹è±¡ãæ åæ¹æ³æ¯ä½¿ç¨SUBSTRING彿°ãä¾å¦ï¼ä¸é¢çè¯å¥å¯¹commentåç2000个åèè¿è¡æåºï¼ mysql> SELECT id, SUBSTRING(comment,1,2000) FROM tbl_name -> ORDER BY SUBSTRING(comment,1,2000); · BLOBæTEXT对象çæå¤§å¤§å°ç±å ¶ç±»åç¡®å®ï¼ä½å¨å®¢æ·ç«¯åæå¡å¨ä¹é´å®é å¯ä»¥ä¼ éçæå¤§å¼ç±å¯ç¨å åæ°éåéä¿¡ç¼ååºå¤§å°ç¡®å®ãä½ å¯ä»¥éè¿æ´æ¹max_allowed_packetåéç弿´æ¹æ¶æ¯ç¼ååºç大å°ï¼ä½å¿ é¡»åæ¶ä¿®æ¹æå¡å¨å客æ·ç«¯ç¨åºãä¾å¦ï¼å¯ä»¥ä½¿ç¨ mysqlåmysqldumpæ¥æ´æ¹å®¢æ·ç«¯çmax_allowed_packetå¼ãåè§7.5.2èï¼âè°èæå¡å¨åæ°âã8.3èï¼âmysqlï¼MySQLå½ä»¤è¡å·¥å ·âå8.8èï¼âmysqldumpï¼æ°æ®åºå¤ä»½ç¨åºâã æ¯ä¸ªBLOBæTEXTå¼åå«ç±å é¨åé ç对象表示ãè¿ä¸å ¶å®åç±»åå½¢æå¯¹æ¯ï¼åè æ¯å½æå¼è¡¨æ¶ä¸ºæ¯1ååé åå¨å¼æã ENUMæ¯ä¸ä¸ªå符串对象ï¼å ¶å¼æ¥èªè¡¨å建æ¶å¨åè§å®ä¸æ¾å¼æä¸¾çä¸åå¼ã å¨æäºæ åµä¸ï¼ENUMå¼ä¹å¯ä»¥ä¸ºç©ºå符串('')æNULLï¼ Â· å¦æä½ å°ä¸ä¸ªéæ³å¼æå ¥ENUM(ä¹å°±æ¯è¯´ï¼å 许çå¼åä¹å¤çå符串)ï¼å°æå ¥ç©ºå符串以ä½ä¸ºç¹æ®é误å¼ã该å符串ä¸âæ®éâ空å符串ä¸åï¼è¯¥åç¬¦ä¸²ææ°å¼å¼0ãåé¢æè¯¦ç»è®¨è®ºã · 妿å°ENUMå声æä¸ºå 许NULLï¼NULLå¼å为该åçä¸ä¸ªææå¼ï¼å¹¶ä¸ é»è®¤å¼ä¸ºNULLã妿ENUMå被声æä¸ºNOT NULLï¼å ¶é»è®¤å¼ä¸ºå 许çå¼åç第1个å ç´ ã æ¯ä¸ªæä¸¾å¼æä¸ä¸ªç´¢å¼ï¼ · æ¥èªåè§å®çå 许çå¼åä¸çå¼ä»1å¼å§ç¼å·ã · 空å符串é误å¼çç´¢å¼å¼æ¯0ãè¿è¯´æä½ å¯ä»¥ä½¿ç¨ä¸é¢çSELECTè¯å¥æ¥æ¾åºåé äºéæ³ENUMå¼çè¡ï¼ · mysql> SELECT * FROM tbl_name WHERE enum_col=0; · NULLå¼çç´¢å¼æ¯NULLã ä¾å¦ï¼å®ä¹ä¸ºENUMçå('one'ï¼'two'ï¼'three')å¯ä»¥æä¸é¢æç¤ºä»»ä½å¼ãè¿æ¾ç¤ºäºæ¯ä¸ªå¼çç´¢å¼ï¼
æä¸¾æå¤å¯ä»¥æ65,535个å ç´ ã å½å建表æ¶ï¼ENUMæåå¼çå°¾é¨ç©ºæ ¼å°èªå¨è¢«å é¤ã 彿£ç´¢æ¶ï¼ä¿åå¨ENUMåçå¼ä½¿ç¨åå®ä¹ä¸æä½¿ç¨ç大å°åæ¥æ¾ç¤ºã请注æå¯ä»¥ä¸ºENUMååé å符éå æ ¡å¯¹è§åã对äºäºè¿å¶æå¤§å°åææçæ ¡å¯¹è§åï¼å½ä¸ºååé 弿¶åºèè大å°åã 妿卿°å¼ä¸ä¸æä¸æ£ç´¢ä¸ä¸ªENUMå¼ï¼å°è¿ååå¼çç´¢å¼ãä¾å¦ï¼ä½ å¯ä»¥è¿æ ·ä»ENUMåæç´¢æ°å¼å¼ï¼ mysql> SELECT enum_col+0 FROM tbl_name; 妿å°ä¸ä¸ªæ°åä¿åå°ENUMåï¼æ°å被è§ä¸ºç´¢å¼ï¼å¹¶ä¸ä¿åç弿¯è¯¥ç´¢å¼å¯¹åºçæä¸¾æåã(使¯ï¼è¿ä¸éåLOAD DATAï¼å®å°ææè¾å ¥è§ä¸ºå符串ï¼ãä¸å»ºè®®ä½¿ç¨ç±»ä¼¼æ°åçæä¸¾å¼æ¥å®ä¹ä¸ä¸ªENUMåï¼å 为è¿å¾å®¹æå¼èµ·æ··æ·ãä¾å¦ï¼ä¸é¢çå嫿å符串å¼'0'ã'1'å'2'çæä¸¾æåï¼ä½æ°å¼ç´¢å¼å¼ä¸º1ã2å3ï¼ numbers ENUM('0','1','2')æ ¹æ®æä¸¾æåå¨åå®ä¹ä¸ååºç顺åºå¯¹ENUMå¼è¿è¡æåºã(æ¢å¥è¯è¯´ï¼ENUM弿 ¹æ®ç´¢å¼ç¼å·è¿è¡æåºï¼ãä¾å¦ï¼å¯¹äºENUM('a'ï¼'b')ï¼'a'æå¨'b'åé¢ï¼ä½å¯¹äºENUM('b'ï¼'a')ï¼'b'æå¨'a'åé¢ã空å符串æå¨é空å符串åé¢ï¼å¹¶ä¸NULL弿卿æå ¶å®æä¸¾å¼åé¢ãè¦æ³é²æ¢ææ³ä¸å°çç»æï¼æåæ¯é¡ºåºè§å®ENUMåãè¿å¯ä»¥ä½¿ç¨GROUP BY CAST(col AS CHAR)æGROUP BY CONCAT(col)æ¥ç¡®ä¿æç §è¯æ±å¯¹åè¿è¡æåºè䏿¯ç¨ç´¢å¼æ°åã å¦æä½ æ³è¦ç¡®å®ä¸ä¸ªENUMåçææå¯è½çå¼ï¼ä½¿ç¨SHOW COLUMNS FROM tbl_name LIKE enum_colï¼å¹¶è§£æè¾åºä¸ç¬¬2åçENUMå®ä¹ã 11.4.5. SETç±»åSETæ¯ä¸ä¸ªå符串对象ï¼å¯ä»¥æé¶æå¤ä¸ªå¼ï¼å ¶å¼æ¥èªè¡¨å建æ¶è§å®çå 许çä¸åå¼ãæå®å æ¬å¤ä¸ªSETæåçSETå弿¶åæåä¹é´ç¨éå·(â,â)é´éå¼ãè¿æ ·SETæå弿¬èº«ä¸è½å å«éå·ã ä¾å¦ï¼æå®ä¸ºSET('one', 'two') NOT NULLçåå¯ä»¥æä¸é¢çä»»ä½å¼ï¼ ''
'one'
'two'
'one,two'SETæå¤å¯ä»¥æ64个ä¸åçæåã å½å建表æ¶ï¼SETæåå¼çå°¾é¨ç©ºæ ¼å°èªå¨è¢«å é¤ã 彿£ç´¢æ¶ï¼ä¿åå¨SETåçå¼ä½¿ç¨åå®ä¹ä¸æä½¿ç¨ç大å°åæ¥æ¾ç¤ºã请注æå¯ä»¥ä¸ºSETååé å符éå æ ¡å¯¹è§åã对äºäºè¿å¶æå¤§å°åææçæ ¡å¯¹è§åï¼å½ä¸ºååé 弿¶åºèè大å°åã MySQLç¨æ°åä¿åSETå¼ï¼æä¿åå¼çä½é¶ä½å¯¹åºç¬¬1个SETæåã妿卿°å¼ä¸ä¸æä¸æ£ç´¢ä¸ä¸ªSETå¼ï¼æ£ç´¢çå¼çä½è®¾ç½®å¯¹åºç»æåå¼çSETæåãä¾å¦ï¼ä½ å¯ä»¥è¿æ ·ä»ä¸ä¸ªSETåæ£ç´¢æ°å¼å¼ï¼ mysql> SELECT set_col+0 FROM tbl_name; 妿å°ä¸ä¸ªæ°åä¿åå°SETåä¸ï¼æ°åä¸äºè¿å¶è¡¨ç¤ºä¸çä½ç¡®å®äºåå¼ä¸çSETæåãå¯¹äºæå®ä¸ºSET('a','b','c','d')çåï¼æåæä¸é¢çåè¿å¶åäºè¿å¶å¼ï¼
å¦æä½ ä¸ºè¯¥ååé ä¸ä¸ªå¼9ï¼å ¶äºè¿å¶å½¢å¼ä¸º1001ï¼å æ¤ç¬¬1个å第4个SET弿å'a'å'd'è¢«éæ©ï¼ç»æå¼ä¸º 'a,d'ã 对äºå å«å¤ä¸ªSETå ç´ çå¼ï¼å½æå ¥å¼æ¶å ç´ æåç顺åºå¹¶ä¸éè¦ãå¨å¼ä¸ä¸ä¸ªç»å®çå ç´ åäºå¤å°æ¬¡ä¹ä¸éè¦ãå½ä»¥åæ£ç´¢è¯¥å¼æ¶ï¼å¼ä¸çæ¯ä¸ªå ç´ åºç°ä¸æ¬¡ï¼æ ¹æ®è¡¨åå»ºæ¶æå®ç顺åºååºå ç´ ãä¾å¦ï¼åå®æä¸ªåæå®ä¸ºSET('a','b','c','d')ï¼ mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); æå ¥å¼'a,d'ã'd,a'ã'a,d,d'ã'a,d,a'å'd,a,d': mysql> INSERT INTO myset (col) VALUES -> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0彿£ç´¢æ¶ææè¿äºå¼æ¾ç¤ºä¸º 'a,d'ï¼ mysql> SELECT col FROM myset; +------+
| col |
+------+
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
+------+
5 rows in set (0.04 sec)妿å°SETå设置为ä¸ä¸ªä¸æ¯æçå¼ï¼å该å¼è¢«å¿½ç¥å¹¶ååºè¦åï¼ mysql> INSERT INTO myset (col) VALUES ('a,d,d,s'); Query OK, 1 row affected, 1 warning (0.03 sec)
mysql> SHOW WARNINGS; +---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'col' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.04 sec)
mysql> SELECT col FROM myset; +------+
| col |
+------+
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
+------+
6 rows in set (0.01 sec)SET弿æ°åé¡ºåºæåºãNULL弿å¨éNULL SETå¼çåé¢ã é常æ åµï¼å¯ä»¥ä½¿ç¨FIND_IN_SET()彿°æLIKEæä½ç¬¦æç´¢SETå¼ï¼ mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0; mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%'; 第1个è¯å¥æ¾åºSET_colå å«value setæåçè¡ã第2个类似ï¼ä½ææä¸åï¼å®å¨å ¶å®å°æ¹æ¾åºset_colå å«valueçè¡ï¼çè³æ¯å¨å¦ä¸ä¸ªSETæåçåå符串ä¸ã ä¸é¢çè¯å¥ä¹æ¯åæ³çï¼ mysql> SELECT * FROM tbl_name WHERE set_col & 1; mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2'; 第1个è¯å¥å¯»æ¾å å«ç¬¬1个setæåçå¼ã第2个è¯å¥å¯»æ¾ä¸ä¸ªç¡®åå¹é çå¼ãåºæ³¨æç¬¬2ç±»çæ¯è¾ãå°setå¼ä¸'val1,val2'æ¯è¾è¿åçç»æä¸å'val2,val1'æ¯è¾è¿åçç»æä¸åãæå®å¼æ¶ç顺åºåºä¸å¨åå®ä¹ä¸æåç顺åºç¸åã 妿æ³è¦ä¸ºSETåç¡®å®ææå¯è½çå¼ï¼ä½¿ç¨SHOW COLUMNS FROM tbl_name LIKE set_colå¹¶è§£æè¾åºä¸ç¬¬2åçSETå®ä¹ã 11.5. åç±»ååå¨éæ±æ ¹æ®ç±»å«ååºäºMySQLæ¯æçæ¯ä¸ªåç±»åçåå¨éæ±ã MyISAM表ä¸è¡çæå¤§å¤§å°ä¸º65,534åèãæ¯ä¸ªBLOBåTEXTå è´¦æ·åªå å ¶ä¸ç5è³9个åèã 妿MyISAMè¡¨å æ¬åé¿åç±»åï¼è®°å½æ ¼å¼ä¹æ¯å¯åé¿åº¦ãå½å建表æ¶ï¼å¨æäºæ¡ä»¶ä¸ï¼MySQLå¯ä»¥å°ä¸ä¸ªåä»åé¿ç±»åæ¹ä¸ºåºå®é¿åº¦çç±»åæåä¹äº¦ç¶ã详ç»ä¿¡æ¯åè§13.1.5.1èï¼âæ²å¯çåè§æ ¼åæ´âã æ°å¼ç±»ååå¨éæ±
DECIMAL(åNUMERIC)çåå¨éæ±ä¸å ·ä½çæ¬æå ³ï¼ ä½¿ç¨äºè¿å¶æ ¼å¼å°9个åè¿å¶(åºäº10)æ°å缩为4个åèæ¥è¡¨ç¤ºDECIMALåå¼ãæ¯ä¸ªå¼çæ´æ°ååæ°é¨åçåå¨åå«ç¡®å®ãæ¯ä¸ª9使°çåæ°éè¦4个åèï¼å¹¶ä¸âå©ä½çâä½éè¦4个åèçä¸é¨åãä¸è¡¨ç»åºäºè¶ åºä½æ°çåå¨éæ±ï¼
æ¥æåæ¶é´ç±»åçåå¨éæ±
å符串类åçåå¨éæ±
VARCHARãBLOBåTEXTç±»æ¯åé¿ç±»åãæ¯ä¸ªç±»åçåå¨éæ±åå³äºåå¼çå®é é¿åº¦(ç¨åé¢ç表ä¸çL表示)ï¼è䏿¯è¯¥ç±»åçæå¤§å¯è½ç大å°ãä¾å¦ï¼VARCHAR(10)åå¯ä»¥å®¹çº³æå¤§é¿åº¦ä¸º10çå符串ãå®é åå¨éæ±æ¯å符串(L)çé¿åº¦ï¼å ä¸ä¸ä¸ªè®°å½å符串é¿åº¦çåèã对äºå符串'abcd'ï¼Læ¯4ï¼åå¨éè¦5个åèã 对äºCHARãVARCHARåTEXTç±»åï¼åé¢ç表ä¸çå¼LåMåºè§£é为å符æ°ç®ï¼å¹¶ä¸åå®ä¹ä¸çè¿äºç±»åçé¿åº¦è¡¨ç¤ºå符æ°ç®ãä¾å¦ï¼è¦æ³ä¿åä¸ä¸ªTINYTEXTå¼éè¦Lå符+ 1个åèã è¦æ³è®¡ç®ç¨äºä¿åå ·ä½CHARãVARCHARæè TEXTåå¼çåèæ°ï¼éè¦èè该å使ç¨çå符éãå¨å ·ä½æ åµä¸ï¼å½ä½¿ç¨Unicodeæ¶ï¼å¿ é¡»è®°ä½ææUnicodeå符使ç¨ç¸åçåèæ°ã为äºç»åç¨äºä¸åç±»Unicodeå符使ç¨çåå¨ï¼åè§10.5èï¼âUnicodeæ¯æâã æ³¨éï¼VARCHARåçæææå¤§é¿åº¦ä¸º65,532å符ã NDBCLUSTERå¼æåªæ¯æåºå®å®½åº¦çåãè¿è¯´æMySQLç°ä¸ç表ä¸çVARCHARåçè¡ä¸ºå¦åç±»åCHAR(ä¸åçæ¯æ¯ä¸ªè®°å½ä»ç¶æä¸ä¸ªé¢å¤åè空é´)ãä¾å¦ï¼å¨Cluster表ä¸ï¼å£°æä¸ºVARCHAR(100)çåä¸çæ¯ä¸ªè®°å½å卿¶å°å ç¨101个åèï¼æ 论å®é åå¨çè®°å½ä¸çå符串çé¿åº¦ä¸ºå¤å°ã BLOBåTEXTç±»éè¦
1ã2ã3æè
4个åèæ¥è®°å½åå¼çé¿åº¦ï¼åå³äºè¯¥ç±»çæå¤§å¯è½çé¿åº¦ãåè§11.4.3èï¼âBLOBåTEXTç±»å å¨NDB Clusteråå¨å¼æä¸ï¼TEXTåBLOBåç宿½æ¯ä¸åçï¼å ¶ä¸TEXTåä¸çæ¯ä¸ªè®°å½ç±ä¸¤ä¸ªåç¬é¨åç»æãä¸ä¸ªæ¯åºå®å¤§å°(256åè)ï¼å¹¶ä¸å®é ä¸ä¿åå¨å表ä¸ãå¦ä¸ä¸ªå æ¬è¶ åº256åèç任使°æ®ï¼ä¿åå¨éå«ç表ä¸ã第2个表ä¸çè®°å½æ»æ¯2,000åèé¿ãè¿è¯´æå¦æsize<= 256ï¼TEXTåç大å°ä¸º256(å ¶ä¸size表示记å½ç大å°)ï¼å¦åï¼å¤§å°æ¯256 +size+(2000â(sizeâ256)%2000)ã ENUM对象ç大å°ç±ä¸åçæä¸¾å¼çæ°ç®ç¡®å®ãæä¸¾ç¨ä¸ä¸ªåèï¼å¯ä»¥æ255个å¯è½çå¼ã彿䏾çå¼ä½äº256å65,535ä¹é´æ¶ï¼ç¨ä¸¤ä¸ªåèãåè§11.4.4èï¼âENUMç±»åâã SET对象ç大å°ç±ä¸åçsetæåçæ°éç¡®å®ã妿set大尿¯Nï¼å¯¹è±¡å (N+7)/8个åèï¼åèäºå ¥å°1ã2ã3ã4æè 8个åèãSETæå¤å¯ä»¥æ64个æåãåè§11.4.5èï¼âSETç±»åâã 为äºä¼ååå¨ï¼å¨ä»»ä½æ åµä¸ååºä½¿ç¨æç²¾ç¡®çç±»åãä¾å¦ï¼å¦æåçå¼çèå´ä¸ºä»1å°99999ï¼è¥ä½¿ç¨æ´æ°ï¼åMEDIUMINT UNSIGNEDæ¯å¥½çç±»åã卿æå¯ä»¥è¡¨ç¤ºè¯¥åå¼çç±»åä¸ï¼è¯¥ç±»å使ç¨çå卿å°ã ç¨ç²¾åº¦ä¸º65ä½åè¿å¶æ°(åºäº10)对DECIMAL åè¿è¡ææåºæ¬è®¡ç®(+ã-ã*ã/)ãåè§11.1.1èï¼âæ°å¼ç±»åæ¦è¿°âã 使ç¨å精度æä½å¯¹DECIMALå¼è¿è¡è®¡ç®ã妿åç¡®åº¦ä¸æ¯å¤ªéè¦æå¦æé度为æé«ä¼å | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||