国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql中int和varchar的長度詳解

2024-07-24 12:37:18
字體:
供稿:網(wǎng)友

在mysql中一般人可能不會去問int與varchar區(qū)別了,這個估計一個數(shù)字類型,一個字符類型沒有可比性了,同時他們長度也不一樣,下面我來介紹一下mysql 中int和varchar的長度一些細節(jié)吧.

int:從 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。存儲大小為 4 個字節(jié)。int 的 SQL-92 同義字為 integer

varcharL長度是0-255個字符.

mysql 字段中int后面所跟數(shù)字有何意義?varchar后的數(shù)字又有何意義?代碼如下:

  1. mysql> create table t(a int(1)); 
  2. Query OK, 0 rows affected (0.10 sec) 
  3. mysql> insert into t values(123); 
  4. Query OK, 1 row affected (0.02 sec) 
  5.  
  6. mysql> insert into t values(12345678); 
  7. Query OK, 1 row affected (0.03 sec) 
  8.  
  9. mysql> select * from t; 
  10. +----------+ 
  11. | a        | 
  12. +----------+ 
  13. |      123 | 
  14. | 12345678 | 
  15. +----------+ 

可見,int(1)并不表示一個字節(jié),如果更長的數(shù)字會不會報錯?代碼如下:

  1. mysql> insert into t values(1234567812345678); 
  2. ERROR 1264 (22003): Out of range value for column 'a' at row 1 
  3. mysql> insert into t values(2147483648); 
  4. ERROR 1264 (22003): Out of range value for column 'a' at row 1 
  5. mysql> insert into t values(2147483647); 
  6. Query OK, 1 row affected (0.03 sec) 

int 型長度最大值是2^31 -1,加上有符號數(shù),應(yīng)該是四個字節(jié)的長度,代碼如下:

  1. mysql> alter table t add column b int
  2. Query OK, 5 rows affected (0.25 sec) 
  3. mysql> insert into t values(2147483647,2147483648); 
  4. ERROR 1264 (22003): Out of range value for column 'b' at row 1 
  5. mysql> insert into t values(2147483647,2147483647); 
  6. Query OK, 1 row affected (0.03 sec) 
  7.  
  8. mysql> select * from t; 
  9. +------------+------------+ 
  10. | a          | b          | 
  11. +------------+------------+ 
  12. |        123 |       NULL | 
  13. |   12345678 |       NULL | 
  14. |      65536 |       NULL | 
  15. | 1073741824 |       NULL | 
  16. | 2147483647 |       NULL | 
  17. | 2147483647 | 2147483647 | 
  18. +------------+------------+ 
  19. rows in set (0.00 sec) 

可見,int后是否跟數(shù)字與最大值沒有關(guān)系,再看char 和varchar后的數(shù)字,代碼如下:

  1. mysql> alter table t add column c char(2); 
  2. Query OK, 6 rows affected (0.17 sec) 
  3. Records: 6  Duplicates: 0  Warnings: 0 
  4.  
  5. mysql> alter table t add column d varchar(2); 
  6. Query OK, 6 rows affected (0.17 sec) 
  7. Records: 6  Duplicates: 0  Warnings: 0 
  8.  
  9. mysql> desc t; 
  10. +-------+------------+------+-----+---------+-------+ 
  11. | Field | Type       | Null | Key | Default | Extra | 
  12. +-------+------------+------+-----+---------+-------+ 
  13. | a     | int(1)     | YES  |     | NULL    |       | 
  14. | b     | int(11)    | YES  |     | NULL    |       | 
  15. | c     | char(2)    | YES  |     | NULL    |       | 
  16. | d     | varchar(2) | YES  |     | NULL    |       | 
  17. +-------+------------+------+-----+---------+-------+ 
  18. rows in set (0.01 sec) 
  19.  
  20. mysql> insert into t values(2147483647,2147483647,'abc','abc'); 
  21. ERROR 1406 (22001): Data too long for column 'c' at row 1 
  22. mysql> insert into t values(2147483647,2147483647,'ab','abc'); 
  23. ERROR 1406 (22001): Data too long for column 'd' at row 1 
  24. mysql> insert into t values(2147483647,2147483647,'ab','ab'); 
  25. Query OK, 1 row affected (0.02 sec) 

可見char和varchar后的數(shù)字是存儲長度,那么對于中文字,會不會有字節(jié)數(shù)大于字數(shù)而溢出的問題呢?代碼如下:

  1. mysql> insert into t values(2147483647,2147483647,'ab','中化'); 
  2. Query OK, 1 row affected (0.02 sec) 
  3.  
  4. mysql> select * from t; 
  5. +------------+------------+------+------+ 
  6. | a          | b          | c    | d    | 
  7. +------------+------------+------+------+ 
  8. |        123 |       NULL | NULL | NULL | 
  9. |   12345678 |       NULL | NULL | NULL | 
  10. |      65536 |       NULL | NULL | NULL | 
  11. | 1073741824 |       NULL | NULL | NULL | 
  12. | 2147483647 |       NULL | NULL | NULL | 
  13. | 2147483647 | 2147483647 | NULL | NULL | 
  14. | 2147483647 | 2147483647 | ab   | ab   | 
  15. | 2147483647 | 2147483647 | ab   | 中化 | 
  16. +------------+------------+------+------+ 
  17. rows in set (0.00 sec) 

中文字也是包含在2個字內(nèi)的,代碼如下:

  1. mysql> insert into t values(2147483647,2147483647,'ab','中化a'); 
  2. ERROR 1406 (22001): Data too long for column 'd' at row 1 
  3. mysql> insert into t values(2147483647,2147483647,'ab','?糸F'); 
  4. Query OK, 1 row affected (0.05 sec) 
  5.  
  6. mysql> select * from t; 
  7. +------------+------------+------+------+ 
  8. | a          | b          | c    | d    | 
  9. +------------+------------+------+------+ 
  10. |        123 |       NULL | NULL | NULL | 
  11. |   12345678 |       NULL | NULL | NULL | 
  12. |      65536 |       NULL | NULL | NULL | 
  13. | 1073741824 |       NULL | NULL | NULL | 
  14. | 2147483647 |       NULL | NULL | NULL | 
  15. | 2147483647 | 2147483647 | NULL | NULL | 
  16. | 2147483647 | 2147483647 | ab   | ab   | 
  17. | 2147483647 | 2147483647 | ab   | 中化 | 
  18. | 2147483647 | 2147483647 | ab   | ?糸F | 
  19. +------------+------------+------+------+ 
  20. rows in set (0.01 sec) 

多一個字節(jié)都不行,看一下字符編碼,mysql字符編碼由服務(wù)器,數(shù)據(jù)庫,表,字段四級組成,在windows下的mysql設(shè)置,代碼如下:

  1. mysql> show variables like "character%"
  2. +--------------------------+--------------------------+ 
  3. | Variable_name            | Value                    | 
  4. +--------------------------+--------------------------+ 
  5. | character_set_client     | gbk                      | 
  6. | character_set_connection | gbk                      | 
  7. | character_set_database   | utf8                     | 
  8. | character_set_filesystem | binary                   | 
  9. | character_set_results    | gbk                      | 
  10. | character_set_server     | utf8                     | 
  11. | character_set_system     | utf8                     | 
  12. | character_sets_dir       | D:mysqlsharecharsets | 
  13. +--------------------------+--------------------------+ 
  14. rows in set (0.00 sec)  //Vevb.com 
  15. mysql> show create table t; 
  16.  t     | CREATE TABLE `t` ( 
  17.  `a` int(1) DEFAULT NULL
  18.  `b` int(11) DEFAULT NULL
  19.  `c` char(2) DEFAULT NULL
  20.  `d` varchar(2) DEFAULT NULL 
  21.  ENGINE=InnoDB DEFAULT CHARSET=utf8 

linux下centos設(shè)置,代碼如下:

  1. mysql> show variables like "character%"
  2. +--------------------------+----------------------------+ 
  3. | Variable_name            | Value                      | 
  4. +--------------------------+----------------------------+ 
  5. | character_set_client     | utf8                       | 
  6. | character_set_connection | utf8                       | 
  7. | character_set_database   | utf8                       | 
  8. | character_set_filesystem | binary                     | 
  9. | character_set_results    | utf8                       | 
  10. | character_set_server     | utf8                       | 
  11. | character_set_system     | utf8                       | 
  12. | character_sets_dir       | /opt/mysql/share/charsets/ | 
  13. +--------------------------+----------------------------+ 
  14. rows in set (0.00 sec) 
  15. mysql> show full fields from t; 
  16. mysql> show create database test; 
  17. CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ 

字符編碼是utf8,因此,對于utf8中文字符,varchar后面的數(shù)字,無論是中文還是英文,都表示相應(yīng)的字數(shù),不用擔心截斷.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 古蔺县| 株洲市| 巨野县| 延寿县| 新疆| 宝兴县| 湘潭县| 新宾| 荔浦县| 襄汾县| 万载县| 汉源县| 城步| 武山县| 廉江市| 凤庆县| 白水县| 蒲城县| 阳东县| 彭泽县| 辽宁省| 固原市| 普宁市| 德清县| 鄂尔多斯市| 大方县| 桐庐县| 秦安县| 安图县| 延津县| 通州区| 株洲市| 茶陵县| 湄潭县| 汉阴县| 大渡口区| 留坝县| 阳信县| 共和县| 北流市| 正定县|