`
outlaw
  • 浏览: 30641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

MySQL字符串列类型区分

阅读更多

MySQL字符串列类型区分

 

1.

 

首先CHAR, VARCHAR, TEXTBINARY, VARBINARY, BLOB的区别:

 

CHAR, VARCHAR, TEXT称为非二进制字符串;

 

BINARY, VARBINARY, BLOB称为二进制字符串;

 

二进制字符串和非二进制字符串的区别是:
二进制字符串包含的是字节字符串,非二进制字符串包含的是字符字符串;

 

后者可以定义字符集,前者不可以;

 

而且排序和比较前者基于列值字节的数值值,后者则根据字母顺序进行排序或比较;

 

 

BINARY类似与CHAR类型,但是保存二进制字符串而不是非二进制字符串;

 

VARBINARY类似与VARCHAR类型,但是保存二进制字符串而不是非二进制字符串;
同样类似的BLOB对应TEXT类型(相应的有TINYBLOBBLOBMEDIUMBLOBLONGBLOBTINYTEXTTEXTMEDIUMTEXTLONGTEXT)

 

2.

 

CHARVARCHAR相同之处:

 

都可以定义字符串的长度,如CHAR(M), VARCHAR(M)

 

 

不同之处:

 

CHAR(M)定义的列的长度为固定的,M取值可以为0255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

 

 

VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL

注意:MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文 件的大小。

 

 

CHARVARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)

 

 

如果分配给CHARVARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

 

 

由于BINARYVARBINARY分别与CHARVARCHAR对应,因此两者的区别也和CHARVARCHAR的区别类似。

 

VARBINARY定义的M值范围为0<=M<=255

 

3. VARCHARTEXT类型的区别:

 

TEXT类型不需要指定M值,其他方面与VARCHAR都类似:比如存储的是可变长度,即不够的部分不需要右边空格填充;等等。

 

TEXTVARCHAR类似,实际需要保存字符串本身外加两个字节保存字符串的实际长度。

 

看下表容易理解上面讲述的区别:

 

字符串类型的存储需求(M为最大长度,L实际存储字符串的长度)

 

列类型

 

 

存储需求

 

 

CHAR(M)

 

 

M个字节,0 <= M <= 255 (L为固定的=255,不够补空格)

 

 

VARCHAR(M)

 

 

L+1个字节,其中L <= M 0 <= M <= 65535(参见下面的注释)(MySQL5.0之前都是最大255)

 

 

BINARY(M)

 

 

M个字节,0 <= M <= 255

 

 

VARBINARY(M)

 

 

L+1个字节,其中L <= M 0 <= M <= 255

 

 

TINYBLOB, TINYTEXT

 

 

L+1个字节,其中L < 28 (256)

 

 

BLOB, TEXT

 

 

L+2个字节,其中L < 216 (65536)

 

 

MEDIUMBLOB, MEDIUMTEXT

 

 

L+3个字节,其中L < 224

 

 

LONGBLOB, LONGTEXT

 

 

L+4个字节,其中L < 232

 

 

ENUM('value1','value2',...)

 

 

12个字节,取决于枚举值的个数(最多65,535个值)

 

 

SET('value1','value2',...)

 

 

1234或者8个字节,取决于set成员的数目(最多64个成员)

 

 


解释:

 

CHAR(M)为固定长度,而且M必须要在0255之间;

 

VARCHAR(M)保存可变长度,M定义了最大长度,M取值065535之间;

 

TINYTEXT不需要定义长度M值,长度范围不超过28 (256)

 

TEXT不需要定义长度M值,长度范围不超过216 (65536)

 

下面类似。。。

 

 

对于二进制字符串形式:BINARY(M)VARBINARY(M)TINYBLOBBLOB等类似。

 

 

 

更详细的信息参考如下链接:

 

http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#string-types

 

 

4.

 

其他一些参考信息:

 

1CHARCHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

 

2VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+<chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">1”</chmetcnv>呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

 

3NCHARNVARCHARNTEXT。这三种从名字上看比前面三种 多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文 与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个 字节表示。ncharnvarchar的长度是在14000之间。和charvarchar比较起来,ncharnvarchar则最多存储 4000个字符,不论是英文还是汉字;而charvarchar最多能存储8000个英文,4000个汉字。可以看出使用ncharnvarchar 数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

 

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

但是注意

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    在mysql中将字符串日期转为日期型

    通过使用`STR_TO_DATE()`函数,可以在MySQL中轻松地将各种格式的字符串日期转换为日期类型,这对于处理复杂的日期数据非常有用。掌握该函数的用法可以帮助开发者更高效地管理数据库中的日期数据。

    批量替换 MySQL 指定字段中的字符串

    批量替换字符串不仅适用于文本字段,还可以应用于其他任何类型的字符或文本数据,只要它们能被字符串函数处理。但需要注意,`REPLACE()` 函数是区分大小写的,因此在处理大小写敏感的情况时要特别注意。 在实际应用...

    第2章 用 MySQL 处理数据

    对于字符串类型,MySQL提供了多种选项,包括`CHAR`、`VARCHAR`等,它们之间的主要区别在于固定长度与变长,以及存储效率的不同。 #### 2.5 数据类型转换规则 MySQL在处理不同数据类型时会自动进行类型转换。例如,...

    Mysql 数字类型转换函数

    - `CHAR_LENGTH` 函数返回字符串的长度,不区分字符编码。 - `FROM_UNIXTIME` 将Unix时间戳转换为可读的日期和时间格式。 - 计算时间差的函数如`DATEDIFF`或`TIMESTAMPDIFF`可以用来计算两个日期或时间之间的差值...

    MySQL 字符类型大小写敏感

    mysql字符类型默认是不区分大小写的,即select * from t where name=’AAA’与=’aaa’没区别,以下是测试的例子 (root@localhost)[hello]&gt; create table test1(id int, name varchar(10)); (root@localhost)[hello...

    mysql字符集与比对方法collation

    MySQL字符集与比对方法Collation是数据库设计中的重要概念,尤其在处理多语言或有特殊字符需求的数据时。字符集(Character Set)定义了数据的编码方式,而比对方法(Collation)则规定了字符的排序和比较规则。在...

    php 不同编码下的字符串长度区分

    UTF-8的中文字符串是三个字节 复制代码 代码如下: &lt;?... echo ‘-‘; echo mb_strlen(‘测试文字a测试文字’,’utf-8′);... 输出:17-9 在Mysql数据库(5.1以后的版本)中,如果字段类型为varchar(10)

    MySQL网络数据库指南002

    首先,MySQL的数据类型分为两大类:数值类型和(字符)串类型。数值类型包括整数和浮点数。整数可以是十进制或十六进制形式,浮点数则包含小数部分,也可以使用科学记数法表示。数值前可加负号表示负值。十六进制...

    Mysql中文参考手册

    字符串是MySQL中最常用的数据类型之一,用于存储文本信息。字符串可以通过单引号(' ')或双引号(" ")进行界定,但在非ANSI模式下,仅单引号可用。以下是一些关键的字符串处理概念: 1. **转义字符**:特定的字符...

    MySql判断汉字、日期、数字的具体函数

    在MySQL数据库中,有时我们需要对数据进行特定类型的验证,例如判断某个字段是否包含汉字、日期格式是否正确或者字符串是否只包含数字。以下将详细介绍标题和描述中提到的三个MySQL自定义函数,它们可以帮助我们实现...

    面试专题-面试人员必看-MySQL专题.pdf

    MySQL中的字符串类型包括SET(集合类型)、BLOB(二进制大对象)、ENUM(枚举类型)、CHAR(固定长度字符串)、TEXT(动态长度字符串)、VARCHAR(可变长度字符串)。 13. 获取MySQL版本: 可以通过执行SELECT ...

    Mysql数据的数据类型说明

    MySQL提供多种不同的字符串类型以适应不同的需求: - **CHAR(N)** 和 **VARCHAR(N)**: 用于存储定长和变长的字符数据。`N` 指定最大字符数。CHAR类型会自动在其后填充空格以达到指定长度,而VARCHAR则不会。 - **...

    mysql like查询字符串示例语句

    MySQL中的LIKE操作符是用于模糊查询的关键字,它在处理字符串数据时非常有用。LIKE语法简单,通过结合通配符“%”和“_”来实现不同类型的模糊匹配。 1. **“%”通配符**: - `%` 在模式中代表任意数量的字符,...

    MySQL的数据类型详解

    本文将详细介绍MySQL支持的主要数据类型,包括数值类型、字符串类型、日期时间类型、二进制类型以及特殊类型。 #### 1. 数值数据类型 数值数据类型主要用于处理数字数据,包括整型和浮点型。 - **整型数据类型** ...

    mysql中向表中某字段追加字符串的方法

    在MySQL数据库中,更新表中某个字段并追加字符串是一个常见的操作,这通常涉及到`UPDATE`语句和`CONCAT`函数的使用。`CONCAT`函数用于将多个字符串拼接成一个新的字符串。例如,标题中提到的方法是更新名为`表名`的...

    Mysql函数大全.pdf

    - 字符串函数在使用时应注意区分大小写,MySQL在某些情况下是区分大小写的。 5. 函数的运用实例: - 使用`CONCAT()`函数可以轻松地将多个字段的值拼接在一起,例如,`SELECT CONCAT(first_name, ' ', last_name) ...

    【SUBSTRING_INDEX】MySQL官方示例

    `SUBSTRING_INDEX()` 是 MySQL 数据库中的一个常用字符串处理函数,主要用于根据指定的分隔符对字符串进行分割,并返回分割后的子字符串。此函数在处理 URL 或路径等类型的数据时非常有用。 #### 二、函数语法 ```...

    mysql设计文档

    5. 相同数据的列名和列类型应保持一致,以保持索引的有效性,提高查询效率。 二、数据库基本设计规范: 1. 使用InnoDB存储引擎,因为它支持事务、行级锁和更好的恢复性,尤其在高并发环境下性能更优。MySQL 5.6及...

    MYSQL的binary解决mysql数据大小写敏感问题的方法

    `BINARY`关键字在MySQL中用于类型转换,它将字符串转换为二进制字符串,使得在比较时能够区分大小写。当使用`BINARY`修饰符时,即使是同样的字符,只要大小写不同,它们在二进制表示上也会有所差异,因此比较时会视...

    mysql数据库面试题及答案(29题).pdf

    MySQL 中有多种字符串类型,包括 SET、BLOB、ENUM、CHAR、TEXT 和 VARCHAR。每种类型都有其特点和应用场景。 存储引擎 MySQL 的存储引擎是指各种技术来存储数据在文件中的机制。常见的存储引擎包括 InnoDB、MyISAM...

Global site tag (gtag.js) - Google Analytics