MySQL VARCHAR型別欄位到底可以定義多長
MySQL 單行行長最大是65535,不包含TEXT,BLOB型別。
varchar 長度小於255時,需要額外使用1位元組儲存長度,大於255時,需要 額外使用2位元組儲存長度。
varchar 欄位如果不定義not null 時,預設null也需要佔1位元組
lantin1字符集儲存的每個值佔1位元組
gbk 字符集儲存的每個值佔2位元組
utf8 字符集儲存的每個值佔3位元組
那麼一行varchar到底可以定義多長呢?
lantin1長度=65535-儲存長度大小 - default NULL大小
gbk長度=(65535-儲存長度大小 - default NULL大小)/2
utf8長度=(65535-儲存長度大小 - default NULL大小)/3
舉例說明:
lantin1情況
lantin1 varchar設定兩個欄位sno小於255( 額外使用1位元組儲存長度),sname大於255( 額外使用2位元組儲存長度),所以單行varchar最大長度為:
mysql> select 65535-1-2; +-----------+ | 65535-1-2 | +-----------+ | 65532 | +-----------+ 1 row in set (0.00 sec)
sno varchar(1) not null+sname varchar(65531) not null=65532,建表成功
mysql> create table my8(sno varchar(1) not null,sname varchar(65531) not null, primary key(sno)) CHARSET=latin1; Query OK, 0 rows affected (0.03 sec) mysql> drop table my8 ; Query OK, 0 rows affected (0.01 sec)
再看sno varchar(1) not null+sname varchar(65532) not null>65532,建表失敗
mysql> create table my8(sno varchar(1) not null,sname varchar(65532) not null, primary key(sno)) CHARSET=latin1; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
如指定 not null sno varchar(1) sname varchar(65531) 就不行,因為有一個隱含的default null還佔用1位元組,建表失敗
mysql> create table my8(sno varchar(1),sname varchar(65531) , primary key(sno)) CHARSET=latin1; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
UTF8情況
UTF8 varchar設定兩個欄位sno小於255(額外使用1位元組儲存長度),sname大於255(額外使用2位元組儲存長度),utf8字符集儲存的每個值佔3位元組,所以單行varchar最大長度為:
mysql> select (65535-1-2)/3; +---------------+ | (65535-1-2)/3 | +---------------+ | 21844.0000 | +---------------+ 1 row in set (0.00 sec)
sno varchar(1) not null+sname varchar(21844) not null>21844,建表失敗
mysql> create table my8(sno varchar(1) not null,sname varchar(21844) not null, primary key(sno)) CHARSET=utf8; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
sno varchar(1) not null+sname varchar(21843) not null=21844,建表成功
mysql> create table my8(sno varchar(1) not null,sname varchar(21843) not null, primary key(sno)) CHARSET=utf8; Query OK, 0 rows affected (0.02 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2723947/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql varchar型別欄位為什麼經常定義為255MySql型別
- 聯機重定義修改欄位型別(NVARCHAR2->VARCHAR2)型別
- mysql變長型別欄位varchar值更新變長或變短底層檔案儲存原理MySql型別
- mysql的varchar欄位最大長度真的是65535嗎?MySql
- mysql中varchar型別最大長度測試MySql型別
- 多型關聯自定義的型別欄位的處理多型型別
- MySQL欄位型別最全解析MySql型別
- mysql表操作(alter)/mysql欄位型別MySql型別
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- Oracle 修改欄位型別和長度Oracle型別
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- 例項操作mysql varchar型別求和MySql型別
- DM8 varchar型別長度型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- MySQL 中 VARCHAR 最大長度及 CHAR 和 VARCHAR 的區別MySql
- MySQL資料型別操作(char與varchar)MySql資料型別
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- MongoDB更改欄位型別MongoDB型別
- ORANCLE 資料已存在,修改欄位型別長度型別
- sql語句修改欄位型別和增加欄位SQL型別
- 6. 自定義容器型別元素驗證,類級別驗證(多欄位聯合驗證)型別
- ES Mapping ,1 欄位型別APP型別
- MYSQL SET型別欄位的SQL操作知識介紹MySql型別
- C++類內成員變數可以定義引用型別嗎C++變數型別
- 儲存過程、觸發器、遊標、檢視、自定義函式 欄位型別、欄位可空、統計欄位、邏輯刪除 許可權系統資料庫&無限極類別設計儲存過程觸發器函式型別資料庫
- 【mongo】mongo 欄位型別互轉Go型別
- 用Elasticsearch做大規模資料的多欄位、多型別索引檢索Elasticsearch多型型別索引
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- MySQL int型別長度的意義是什麼MySql型別
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- 地理位置經緯度在Mysql中用什麼欄位型別MySql型別
- MySQL把字串欄位轉換為日期型別進行比較MySql字串型別
- MySQL中CHAR和VARCHAR區別MySql
- Mysql BLOB、BLOB與TEXT區別及效能影響、將BLOB型別轉換成VARCHAR型別MySql型別
- Simple WPF: WPF自定義一個可以定義步長的SpinBox
- mysql多表多欄位查詢並去重MySql
- MySQL的欄位數量以及長度限制MySql