当前位置:网站首页>MySQL字符类型学习笔记
MySQL字符类型学习笔记
2022-07-05 09:36:00 【51CTO】
@[toc]
一、字符集和字符编码
1.1、字符集
- 字符集:字符集就是字符的集合,例如GB2312是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。
字符集查询sql:
我本地是5.7.22版本,支持的字符集就有如下:
Charset | Description | Default collation | Maxlen |
big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
dec8 | DEC West European | dec8_swedish_ci | 1 |
cp850 | DOS West European | cp850_general_ci | 1 |
hp8 | HP West European | hp8_english_ci | 1 |
koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
latin1 | cp1252 West European | latin1_swedish_ci | 1 |
latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
ascii | US ASCII | ascii_general_ci | 1 |
ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
tis620 | TIS620 Thai | tis620_thai_ci | 1 |
euckr | EUC-KR Korean | euckr_korean_ci | 2 |
koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
greek | ISO 8859-7 Greek | greek_general_ci | 1 |
cp1250 | Windows Central European | cp1250_general_ci | 1 |
gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
cp866 | DOS Russian | cp866_general_ci | 1 |
keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
macce | Mac Central European | macce_general_ci | 1 |
macroman | Mac West European | macroman_general_ci | 1 |
cp852 | DOS Central European | cp852_general_ci | 1 |
latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
cp1256 | Windows Arabic | cp1256_general_ci | 1 |
cp1257 | Windows Baltic | cp1257_general_ci | 1 |
utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
binary | Binary pseudo charset | binary | 1 |
geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
1.2、字符编码
- 字符编码:字符编码是将字符映射为特定的字节或者字节序列,不过一般是特定的字符集采用特定的编码方式
字符编码查询sql:
查询一下字符编码,如下是5.7.22版本的,有222条记录:
在这里插入图片描述
注意:MySQL的字符集设置不进可以设置整一张表,也可以细到具体的每个字段上,用法是在建表或者修改字段时候加上
charset [字符集名称]
二、字符集排序规则
2.1、排序规则定义
排序规则(Collation):排序规则是指对字符集下字符的比较规则。
2.2 、排序规则特征
排序规则特征:
- 每个字符集都有一个默认的排序规则
- 一个字符集对应一个排序规则,两个不同字符集不能有相同的排序规则
注意:排序规则常用的命名规范有:以_ci结尾的表示大小写不敏感(case insensitive),以_cs结尾的表示大小写敏感(case sensitive),以_bin结尾的表示二进制的比较(binary)
如图,选择一下collation,5.7.22版本的,大部分都是以ci结尾的,也就是大小写不敏感
在这里插入图片描述
例子:
三、CHAR和VARCHAR
char和varchar是两种最常见的字符串类型,其语法分别是char(N)和varchar(N),注意其中N在MySQL4.1版本后都表示字符的长度,而非字节长度,在MySQL4.1之前版本才表示字节的长度
3.1、CHAR类型
对于CHAR(N),N的范围为0~255
CHAR(N)是来保存固定长度的字符串,也是根据设置的值N,假如N设置为10,不管你传什么范围内的字符串,都是固定长度为10的,因为数据库为存储列的右边进行填充(Right padded),而在读取时候数据库又会自动将填充的字符删除.除非设置SQL_MODE属性PAD_CHAR_TO_FULL_LENGTH,才可以正常显示
例子实践:
在这里插入图片描述
在这里插入图片描述
3.2、VARCHAR类型
对于varchar类型是存储可变长字符串的,意思就是varchar(10)的列,我写字符串“abcd“,该列存储的4个字符,而char(10)的列才会存储10个字符
四、BINARY和VARBINARY
4.1、特性对比
BINARY(N)和VARBINARY(N)与前面介绍的CHAR(N)和VARCHAR(N)类型有点类似,BINARY可类比CHAR,VARBINARY可以类比VARCHAR类型。
对比:
- 不同的是BINARY和VARBINARY存储的都是二进制类型的字符串,CHAR和VARCHAR存储的才是字符类型的字符串
- BINARY和VARBINARY没有字符集的概念,CHAR和VARCHAR这些才有字符集的概念
- BINARY(N)和VARBINARY(N)中的N表示的字节的长度,从前面我们知道CHAR(N)和VARCHAR(N)中的N自从MySQL4.1之后,就表示字符的长度
- CHAR和VARCHAR进行字符比较时,是比较本身存储的字符,忽略填充的字符的,而BINARY和VARBINARY是不忽略的,比较的是二进制值的
4.2、例子实践
在这里插入图片描述
五、BLOB和TEXT
可以将blob类型的列视为足够大的varbinary类型的列,也可以将text类型的列视为足够大的varchar类型的列
5.1、text类型
TEXT 是用来存储字符大数据类型的,TEXT类型和blob类型一样,可以细分为:
- tinytext(2^8)
- text(2^16)
- mediumtext(2^24)
- longtext(2^32)
5.2、blob类型
BLOB(Binary Large Object)是用来存储二进制大数据类型的。根据存储长度的不同,blob类型可以细分为:
- tinyblob(2^8)
- blob(2^16)
- mediumblob(2^24)
- longblob(2^32)
5.3、排序问题
blob和text排序问题:
注意: BLOB和TEXT排序时只使用列的前max_sort_length个字节
5.4、索引问题
blob和text加索引问题:
blob和text类型的列加索引时候,需要注意一些细节
- 1、对于列不能有默认值
- 2、加索引时需要指定索引前缀长度
六、ENUM和SET类型
6.1、集合类型简介
enum和set类型都是集合类型,不同是enum最多枚举65536个元素,而set类型最多枚举64个元素
6.2、集合类型例子
# 创建表验证问题
CREATE TABLE t (username VARCHAR(20),sex ENUM('male','female'))ENGINE=INNODB;
# 正常写数据
INSERT INTO t SELECT 'David','male';
INSERT INTO t SELECT 'john','female';
# 写数据,因为没有对应枚举类型,不过还是可以写入,不是警告而已
INSERT INTO t SELECT 'mariah','security';
# 查询出来,发现sex字段没值
select * from t ;
# 设置严格模式的
SET SQL_MODE = 'strict_trans_tables';
# 再次写数据,发现不可以写
INSERT INTO t SELECT 'mariah','security';
# 再次查询没有写成功
SELECT * FROM t;
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
在这里插入图片描述
边栏推荐
- 为什么不建议你用 MongoDB 这类产品替代时序数据库?
- SQL learning group by multi table grouping scenario
- cent7安装Oracle数据库报错
- [200 opencv routines] 219 Add digital watermark (blind watermark)
- Oracle combines multiple rows of data into one row of data
- Roll up, break through 35 year old anxiety, and animate the CPU to record the function call process
- TDengine 连接器上线 Google Data Studio 应用商店
- From "chemist" to developer, from Oracle to tdengine, two important choices in my life
- MYSQL 对字符串类型排序不生效问题
- [two objects merged into one object]
猜你喜欢
How do enterprises choose the appropriate three-level distribution system?
SQL learning - case when then else
Why does everyone want to do e-commerce? How much do you know about the advantages of online shopping malls?
LeetCode 31. Next spread
[team PK competition] the task of this week has been opened | question answering challenge to consolidate the knowledge of commodity details
90%的人都不懂的泛型,泛型的缺陷和应用场景
卷起來,突破35歲焦慮,動畫演示CPU記錄函數調用過程
Viewpager pageradapter notifydatasetchanged invalid problem
The popularity of B2B2C continues to rise. What are the benefits of enterprises doing multi-user mall system?
Windows uses commands to run kotlin
随机推荐
[JS sort according to the attributes in the object array]
The writing speed is increased by dozens of times, and the application of tdengine in tostar intelligent factory solution
Fluent development: setting method of left and right alignment of child controls in row
Three-level distribution is becoming more and more popular. How should businesses choose the appropriate three-level distribution system?
让AI替企业做复杂决策真的靠谱吗?参与直播,斯坦福博士来分享他的选择|量子位·视点...
如何正确的评测视频画质
Node の MongoDB Driver
【对象数组的排序】
[NTIRE 2022]Residual Local Feature Network for Efficient Super-Resolution
Principle and performance analysis of lepton lossless compression
百度智能小程序巡檢調度方案演進之路
Tdengine can read and write through dataX, a data synchronization tool
90%的人都不懂的泛型,泛型的缺陷和应用场景
[technical live broadcast] how to rewrite tdengine code from 0 to 1 with vscode
A keepalived high availability accident made me learn it again
[object array A and object array B take out different elements of ID and assign them to the new array]
Coordinate system of view
tongweb设置gzip
Generics, generic defects and application scenarios that 90% of people don't understand
Online chain offline integrated chain store e-commerce solution