mysql中char和varchar有什么区别?

mysql中char和varchar有什么区别?,第1张

mysql中char和varchar有什么区别?

mysql中char与varchar的区别分析

1.都是用来存储字符串的,只是他们的保存方式不一样。

2.char有固定的长度,而varchar属于可变长的字符类型。

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

在MySQL中用来判断是否需要进行对据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.

2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.

3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.

nvarchar和varchar,char,nchar有什么区别?

nchar(n)

包含 n 个字符的固定长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍。nchar 在 SQL-92 中的同义词为 national char 和 national character。

nvarchar(n)

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。注释如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

如果希望列中所有数据项的大小接近一致,则使用 nchar。

如果希望列中数据项的大小差异很大,则使用 nvarchar。

使用 nchar 或 nvarchar 的对象被赋予数据库的默认排序规则,除非使用 COLLATE 子句赋予特定的排序规则。

SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar。SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。

二、char 和 varchar

固定长度 (char) 或可变长度 (varchar) 字符数据类型。char[(n)]

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

varchar[(n)]

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。注释如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar:

如果希望列中的数据值大小接近一致,请使用 char。

如果希望列中的数据值大小显著不同,请使用 varchar。

如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。

当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

char ,varchar,nvarchar有什么区别

char 类型是一个字节 char(8)只能存8字母

nchar 类型是双字节 nchar(8)能存8个汉字

varchar 类型是可变的、即如果 varchar(8)你只存了一个字母、在内存中只占一个字节

char 类型如果 char(8)你只存了一个字母、在内存中也占8个字节

sql 中int nvarchar char VARchar 有什么区别

1.int 类型:

从 -2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型数据(所有数字)。

存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

2. char类型:

对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。

3. VARCHAR存储变长数据

如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。

Varchar类型:Varchar 的类型不以空格填满,而Char则会填充满为止,如varchar(100),但它的值只是"qian",所以它在数据库中存的值就是"qian",而char 不一样,如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。

注:由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

4. Nvarchar类型

为了与其他多种字符的转换,如中文,音标等,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。

varchar(n):变长型字符数据类型,存储最长长度为8,000 个字符

nvarchar(n):可变长度 Unicode 数据,其最大长度为 4,000 字符.字节的存储大小是所输入字符个数的两倍,就是说它是双字节来存储数据的。如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。

varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题。

char,nchar,varchar,nvarchar 有什么区别

高等教育出版社《数据库技术及应用》的81页

char 储存固定长度的字符串 最大长度 8000 个字节

varcahr 储存可变长度的字符串 最大长度8000 个字节

nchar 储存固定长度的unicode字符串 最大长度为 4000 个字符

nvarchar 储存可变长度的unicode字符串 最大长度为 4000个字符

备注:有“var”前缀的都是可变的意思,就是说你在输入字符时可以输入任意长度不同的字符串

另外,你存名字:中文名就用nvarchar 吧 英文名就用varchar吧,

sql server 2005中 char()、nchar()、varchar()、nvarchar()有什么区别?

char和nchar一般用于数据长度基本相同的字段,如手机号都是11位,可以用char(11)。但如果长度不完全一样,假设有8位的手机号,那会在数据后面自动补3个占位符,此时如果有like '%phone%' 这样的模糊查询就有问题了

n一般用于中文存储,char 10能存5个汉字或10个字符,nchar能存10个汉字或10个字符。

char的存储效率比varchar稍微高点,就是要定长,根据不同项目需要吧

SQL中varchar和nvarchar有什么区别?

varchar(n)

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee

那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

上面是一个总结介绍,通过上面的介绍,可以知道。

varchar(4) 可以输入4个字线,也可以输入两个汉字

nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

sqlserver中,varchar和varing有什么区别

SQL SERVER中生成的语句中,字符串前加N。N 前缀必须是大写字母。是Unicode编码的意思,一般来说,英文字符是一个字节组成,但是国际上的字太多了,因此就用两个字节来表示字符,满足国际化的需要.

在字符串前面加上 N 代表存入数据库时以 Unicode 格式存储。N'string' 表示string是个Unicode字符串

Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。

Unicode 字符串常量支持增强的排序规则。

select '''a''' --输出'a' 在sql语句中'用''来转义,其他字符可以直接输

存储含有中文字符的最好有nvarchar

存储只有英文、数字的最好用varchar

1.有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

2.有n前缀的,n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar 字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

3.基于以上两点来看看字段容量

char,varchar 最多8000个英文,4000个汉字

nchar,nvarchar 可存储4000个字符,无论英文还是汉字

varchar与nvarchar的选择("n"前缀)

使用varchar存储含有非英文字符(比如中文,日文)时出现“??”的乱码

使用nvarchar的一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别. 当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.

所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.

SqlServer中nvarchar和varchar的区别 1、各自的定义:

1.nvarchar(n) : 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。

2.varchar[(n)]: 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

2、区别:

1.从存储方式上,nvarchar是按字符存储的,而 varchar是按字节存储的;

2.从存储量上考虑, varchar比较节省空间,因为存储大小为字节的实际长度,而 nvarchar是双字节存储;

3.在使用上,如果存储内容都是英文字符而没有汉字等其他语言符号,建议使用varchar;含有汉字的使用nvarchar,因为nvarchar是使用Unicode编码,即统一的字符编码标准,会减少乱码的出现几率;

4.如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar。

在oracle中varchar和varchar2有什么区别?

区别点:

varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节。

varchar2把空串等同于null处理,而varchar仍按照空串处理。

varchar2把所有字符都占两字节处理(一般情况下),并且字符要用几个字节存储,要看数据库使用的字符集。

oracle数据库详解

简介

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。

软件技术特点

技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。Oracle技术已经成为全球每个IT公司必选的软件技术之一,熟练掌握Oracle技术能够为从业人员带来技术应用上的优势,同时为IT技术的深入应用起到非常 关键的作用。掌握 Oracle技术,是IT从业人员了解全面信息化整体解决方案的基础。

总结

oracle数据库是由美国甲骨文设计的一款关于关系数据库管理的软件,具有强大且全面的数据管理功能,学习起来也比较繁琐,一旦学有所成,就是这方面的精英。在IT行业,这款软件的用处很大,任何对于数据管理有要求的企业都会多多少少用到一些相关的内容。

VARCHAR是MySQL中常用的数据类型,但其单位究竟是字符还是字节呢?

经过查阅,MySQL的 官方文档 给出了答案:

4.1及之后的版本,VARCHAR的单位是字符;4.1之前的版本,VARCHAR的单位是字节。(As of version 4.1 , MySQL interprets length specifications in character column definitions in character units . (Before MySQL 4.1, column lengths were interpreted in bytes .) This applies to CHAR, VARCHAR and the TEXT types.)

同时官方文档也提到,4.1及之后的版本以UTF-8作为预定义字符集。(VARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the standard SQL way to define that a VARCHAR column should use some predefined character set. MySQL 4.1 and up uses UTF8 as this predefined character set .)

在 Go 语言中,是不能用 len 函数来统计字符串中的字符个数的,这是因为在 Go 中,字符串是以 UTF-8 为格式进行存储的,在字符串上调用 len 函数,取得的是字符串包含的 byte 的个数。

那么如何在Go语言中获取字符串中的字符个数呢?有下面几种方法:

测试发现速度最快的是 utf8.RuneCountInString()

从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。

不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。在4.1之前,N表示的是最大存储的字节数(bytes)。

也就是说varchar(20)和varchar(255)对应的索引长度分别为20 3(utf-8)(+2+1),255 3(utf-8)(+2+1),其中"+2"用来存储长度信息,“+1”用来标记是否为空,加载索引信息时用varchar(255)类型会占用更多的内存; (备注:当字段定义为非空的时候,是否为空的标记将不占用字节)例如,测试sql(InnoDB引擎)如下:

varchr(10)变长字段且允许NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段)

varchr(10)变长字段且不允许NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+2(变长字段)

char(10)固定字段且允许NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL) char(10)固定

字段且允许NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段都被查询用到。

varchar(20)与varchar(255)都是保持可变的字符串,当使用ROW_FORMAT=FIXED创建MyISAM表时,会为每行使用固定的长度空间,这样设置不同的varchar长度值时,存储相同数据所占用的空间是不一样。

另外,我们还遇到过有人以为varchar不能设置超过255的人。其实varchar没有明确最大长度,然后有人说那65535字节(bytes)不是吗?

但是事实上如果你用的 utf8 编码的话按理最大可以设置到 varchar(21845),但是其实一般都会说你超出。其实 MySQL要求一个行定义长度不能超过 65535 bytes (所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等大字段类型除外)。

首先我们要知道一个概念: InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes) (前缀长度适用于mysql5.6及以前,后续版本有变化),你如果需要建索引,就不能超过 767 bytes(mysql5.6及以前,后续版本有变化)。

utf8编码时 255 3=765bytes ,恰恰是能建索引情况下的最大值.*

如果像lavavel5.3往后 使用的是utf8mb4编码,默认字符长度则应该是 767除以4向下取整,也就是191。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8688959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存