char 与 varchar 区别
MySQL中的字符串有两个常用的类型:char和varchar,二者各有优势,下面我们来详细分析一下。
转载加补充
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下两者的区别。
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。
尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。
两者的存储数据都非unicode的字符数据。
一般用 char 类型的 存放 固定的数据 如 身份证号(18) 电话号 性别 。。。。
用varchar 存放可变的数据 这个就太多了 。。。。
UniCode与非UniCode的区别
在数据库中我们通常会遇到字符串与Unicode字符串,对于想我这样的初学者很多人是有很多疑问的,对此我把这个问题整理一下,方便自己与大家对知识的掌握。
字符串:(1)Char:固定长度,长度为n个字节,取值范围1~8 000,存储大小是n个字节。
(2)Varchar:可变长度,n 的取值范围为1-8 000 。max 指定最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加两个字节。所输入数据的长度可以为0个字符。
(3)Text:长度可变,最大长度为2^31-1(2 147 483 647)个字符。
Unicode字符串:(1)Nchar:n 个字符的固定长度的Unicode字符数据。n值必须在1~4 000 之间。存储大小为两倍的n字节。
(2)Nvarchar:长度可变的Unicode字符数据。n 值在1~4 000 之间。max 指定最大存储大小为2^30-1 个字节。存储大小是所输入字符个数的两倍加两个字节。所输入数据的长度可以为0 个字符。
(3)Ntext:长度可变的Unicode数据,最大长度为2^31-1(1 073 741 823)个字符。存储大小是所输入字符个数的两倍(以字节为单位)。
它们的用法是一样的,但是Unicode支持的字符范围更大,存储 Unicode 字符所需要的空间更大。
Unicode 数据
Unicode
标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode
数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。
对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256
个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。
每个 Microsoft SQL Server 排序规则都有一个对表示
char、varchar 和 text
值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。
Unicode
规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的
Unicode
系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用
Unicode 数据类型,可尽量减少字符转换问题。
char 与 varchar 区别的更多相关文章
- 数据库字段类型中char和Varchar区别
char和varchar区别 char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你 ...
- mysql基础之三:char与varchar区别,varchar(M)能存多少
char与varchar区别 char (13)长度固定, 如'1234567890' 存储需要空间 10个字符; varchar(13) 可变长 如'1234567890' 需要存储空间 11字符; ...
- MySQL中char与varchar区别,varchar最大长度是多少?
一.首先来说下字符与字节的区别: 字符与字节它们完全不是一个位面的概念,所以两者之间没有"区别"这一说法.在不同编码里,字符和字节的对应关系是不同的.一般来说,半角英文状态下一个字 ...
- 数据库中char和varchar区别
区别: 1)char长度是固定,而varchar长度是可变的: 比如:'abc'对于char(10)表示存储字符将占10个字节(包括7个空字符),而同样varchar(10)只占3个自己长度,10只是 ...
- char与varchar区别-转
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHA ...
- char与varchar区别
char:储存定长数据,长度不够,以空格填满.储存效率高. varchar: 变长数据,根据数据长度储存,节省空间,效率低.
- mysql中char和varchar区别
char是一种固定长度的类型,varchar则是一种可变长度的类型 char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些 ...
- char nvarchar varchar
1. char 固定长度,最长n个字符. 2. varchar 最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同) char和varchar区别: ...
- 小谈数据库Char、VarChar、NVarChar差异
1. char 固定长度,最长n个字符. 2. varchar 最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同) char和varchar区别: ...
随机推荐
- Deepin 15.4 如何使用 罗技无线键盘/鼠标(采用优联技术)
1.罗技的“无线优联技术”还是非常强大的,它跟具体的操作系统无关: 2.你只需要 让“优联接收器(一个USB设备)”跟 “无线键盘/鼠标” 配对即可,配对完之后,就无需再配对,即使把“优联接收器”插到 ...
- [web 前端] css3 transform方法常用属性
cp from : https://www.cnblogs.com/chrxc/p/5126569.html css3中transform方法是一个功能强大的属性,可以对元素进行移动.缩放.转动.拉长 ...
- 为什么样本方差分母是n-1
https://blog.csdn.net/qq_39521554/article/details/79633207 为什么样本方差的分母是n-1?为什么它又叫做无偏估计? 至于为什么是n-1,可以看 ...
- docker 端口映射 及外部无法访问问题
docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射. docker run -it --rm -p : server:v1 此时出现问题,在虚机A上部署后,在A内能够访问8 ...
- 设置DataGridView不自动创建生成列
DataGridView.AutoGenerateColumns 获取或设置一个值,该值指示是否为数据源中的每一字段自动创建 BoundColumn 对象并在 DataGrid 控件中显示这些对象. ...
- Effective Java 第三版——75. 在详细信息中包含失败捕获信息
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 【原创 Hadoop&Spark 动手实践 1】Hadoop2.7.3 安装部署实践
目录: 第一部分:操作系统准备工作: 1. 安装部署CentOS7.3 1611 2. CentOS7软件安装(net-tools, wget, vim等) 3. 更新CentOS7的Yum源,更新软 ...
- [python] ThreadPoolExecutor线程池 python 线程池
初识 Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?在介绍线程同步的信号量机制的时候,举得例子是爬虫的例子,需要控制同时爬取的线程数,例子中创建了20个线程 ...
- C#学习笔记(36)——事件传值(非常牛逼!)
说明(2018-4-9 23:01:20): 1. 这个真的想了很久,从晚上八点半写完上一篇博客,一直想到现在11点,以为没有办法实现了,结果看到一篇CSDN的文章,虽然没有看明白,但是看到一行代码后 ...
- 60cms Cookies欺骗漏洞审计
源码地址:https://files.cnblogs.com/files/ssooking/60cms.zip 运行60cms目录下的Netbox.exe即可开启Asp Web服务,默认端口80 环境 ...