日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)

發(fā)布時間:2024/9/27 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

認識Mysql數(shù)據(jù)類型里的字符串

數(shù)據(jù)類型概述

Mysql里的數(shù)據(jù)類型主要有數(shù)值型(整形、浮點型)、時間類型、字符串類型、JSON類型、坐標類型、混合類型(整數(shù)或字符串)。本文主要介紹字符串和二進制類型的使用。

字符串與二進制類型概述

字符串是和二進制類型是比較靈活的可以存放任意數(shù)據(jù)的靈活類型。二進制類型和字符串的差別是字符串在存儲時指定了字符集,即mysql能“讀懂”這個字符串,而二級制則存的是裸的數(shù)據(jù),需要特定或者專有的方法(程序)去解析。

行容量限制

因為mysql里每一個行的大小被限制在64k,所以varchar、varbinary最大只能存65533 個字符。其中如果該字段定義為NOT NULL為65533、NULL 為65532,這是因為定義為VARCHAR類型需要占2個字節(jié),定義為NULL時存儲標記位占1個字節(jié),總存儲為65535,所以有65532這個結(jié)果。

更多信息可參考: https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#row-size-limits

字符集

utf8mb4是未來支持的默認字符集(即一個字符占4個字節(jié)),當前版本(Mysql.8)的字符集是utf8mb3(一個字符占3個字節(jié)),盡管它是utf8的別名。

排序規(guī)則

排序規(guī)則經(jīng)常用在字段排序和比較中,以utf8mb4_0900_ai_ci,來介紹其含義:

utf8mb4:所屬的字符集

0900:該排序規(guī)則基于Unicode Collation Algorithm (UCA) 9.0.0。

ai: 排序規(guī)則可以是重音不敏感(ai)或重音敏感(as)。

ci: A collation can be case insensitive (ci) or case sensitive (cs)

數(shù)據(jù)類型與最大長度

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

最大字節(jié)長度

char(M)

255字符

varchar(M)

utf8mb4下16383個字符、latin1下65532或65533個字符

tinytext

255個字節(jié)

text

65535個字節(jié)

mediumtext

16777216個字節(jié)

longtext

4294967296個字節(jié)

binary(M)

255個字節(jié)

varbinary(M)

65532個字節(jié)

代碼示例

-- 1 char類型最大為255個字符。 CREATE TABLE tb_chartype (charcol char(256)) > 1074 - Column length too big for column 'charcol' (max = 255); use BLOB or TEXT instead > 時間: 0s -- 2 超過255則報錯。 INSERT INTO tb_chartype select REPEAT('m', 256) > 1406 - Data too long for column 'charcol' at row 1 > 時間: 0.004sINSERT INTO tb_chartype select REPEAT('m', 255);INSERT INTO tb_chartype select REPEAT('中', 255);# 3 設置varchar的最大長度 ALTER TABLE tb_chartype ADD varcharcol VARCHAR(65532) > 1074 - Column length too big for column 'varcharcol' (max = 21844); use BLOB or TEXT instead > 時間: 0.518s這里報錯是因為當前表的字符集是utf8mb3即一個字符占3個字節(jié),所以當前字符集下varchar最大存的是21844個字符。即65532/3=21844。CREATE TABLE `tb_chartype` (`charcol` char(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;-- 4 因為一個表定義時所有字段的總長度不超過65535字節(jié)(64k),所以這里報錯。 ALTER TABLE tb_chartype ADD varcharcol VARCHAR(21844) > 1118 - 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 > 時間: 0.448sALTER TABLE tb_chartype ADD varcharcol VARCHAR(21589) > OK > 時間: 0.62s--這里21844-255=21589-- 5 插入21590個則會報錯,因為最大長度是21589 INSERT INTO tb_chartype(varcharcol) select REPEAT('國', 21590);INSERT INTO tb_chartype(varcharcol) select REPEAT('國', 21589) > Affected rows: 1 > 時間: 0.101s-- 6 如果指定表的字符集是latin1,則最大長度是65532。 CREATE TABLE tb_charvar2( varcol varchar(65532) ) DEFAULT CHARSET=latin1 INSERT INTO tb_charvar2 SELECT REPEAT('A',65532)-- 7 varchar類型單字段最大長度。NOT NULL為65533、NULL 為65532。Mariadb里統(tǒng)一為65532。 CREATE TABLE `a` (`c1` varchar(65533) not null ) ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE `b` (`c1` varchar(65532) null ) ENGINE=InnoDB DEFAULT CHARSET=latin1

總結(jié)

以上是生活随笔為你收集整理的Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。