MySQL字符串列类型区分
1.
首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别:
CHAR, VARCHAR, TEXT称为非二进制字符串;
BINARY, VARBINARY, BLOB称为二进制字符串;
二进制字符串和非二进制字符串的区别是:
二进制字符串包含的是字节字符串,非二进制字符串包含的是字符字符串;
后者可以定义字符集,前者不可以;
而且排序和比较前者基于列值字节的数值值,后者则根据字母顺序进行排序或比较;
BINARY类似与CHAR类型,但是保存二进制字符串而不是非二进制字符串;
VARBINARY类似与VARCHAR类型,但是保存二进制字符串而不是非二进制字符串;
同样类似的BLOB对应TEXT类型(相应的有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB和TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)
2.
CHAR和VARCHAR相同之处:
都可以定义字符串的长度,如CHAR(M), VARCHAR(M);
不同之处:
CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存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来存放,这样就能有效的减少数据库文 件的大小。
CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)
如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。
由于BINARY和VARBINARY分别与CHAR和VARCHAR对应,因此两者的区别也和CHAR和VARCHAR的区别类似。
VARBINARY定义的M值范围为0<=M<=255
3. VARCHAR和TEXT类型的区别:
TEXT类型不需要指定M值,其他方面与VARCHAR都类似:比如存储的是可变长度,即不够的部分不需要右边空格填充;等等。
TEXT与VARCHAR类似,实际需要保存字符串本身外加两个字节保存字符串的实际长度。
看下表容易理解上面讲述的区别:
字符串类型的存储需求(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',...)
|
1或2个字节,取决于枚举值的个数(最多65,535个值)
|
SET('value1','value2',...)
|
1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)
|
解释:
CHAR(M)为固定长度,而且M必须要在0~255之间;
VARCHAR(M)保存可变长度,M定义了最大长度,M取值0~65535之间;
TINYTEXT不需要定义长度M值,长度范围不超过28 (256);
TEXT不需要定义长度M值,长度范围不超过216 (65536);
下面类似。。。
对于二进制字符串形式:BINARY(M),VARBINARY(M),TINYBLOB,BLOB等类似。
更详细的信息参考如下链接:
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#string-types
4.
其他一些参考信息:
1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。
2、VARCHAR。存储变长数据,但存储效率没有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合适,关键是根据实际情况找到权衡点。
3.NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种 多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文 与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个 字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储 4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar 数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar
但是注意
分享到:
相关推荐
通过使用`STR_TO_DATE()`函数,可以在MySQL中轻松地将各种格式的字符串日期转换为日期类型,这对于处理复杂的日期数据非常有用。掌握该函数的用法可以帮助开发者更高效地管理数据库中的日期数据。
批量替换字符串不仅适用于文本字段,还可以应用于其他任何类型的字符或文本数据,只要它们能被字符串函数处理。但需要注意,`REPLACE()` 函数是区分大小写的,因此在处理大小写敏感的情况时要特别注意。 在实际应用...
对于字符串类型,MySQL提供了多种选项,包括`CHAR`、`VARCHAR`等,它们之间的主要区别在于固定长度与变长,以及存储效率的不同。 #### 2.5 数据类型转换规则 MySQL在处理不同数据类型时会自动进行类型转换。例如,...
- `CHAR_LENGTH` 函数返回字符串的长度,不区分字符编码。 - `FROM_UNIXTIME` 将Unix时间戳转换为可读的日期和时间格式。 - 计算时间差的函数如`DATEDIFF`或`TIMESTAMPDIFF`可以用来计算两个日期或时间之间的差值...
mysql字符类型默认是不区分大小写的,即select * from t where name=’AAA’与=’aaa’没区别,以下是测试的例子 (root@localhost)[hello]> create table test1(id int, name varchar(10)); (root@localhost)[hello...
MySQL字符集与比对方法Collation是数据库设计中的重要概念,尤其在处理多语言或有特殊字符需求的数据时。字符集(Character Set)定义了数据的编码方式,而比对方法(Collation)则规定了字符的排序和比较规则。在...
UTF-8的中文字符串是三个字节 复制代码 代码如下: <?... echo ‘-‘; echo mb_strlen(‘测试文字a测试文字’,’utf-8′);... 输出:17-9 在Mysql数据库(5.1以后的版本)中,如果字段类型为varchar(10)
首先,MySQL的数据类型分为两大类:数值类型和(字符)串类型。数值类型包括整数和浮点数。整数可以是十进制或十六进制形式,浮点数则包含小数部分,也可以使用科学记数法表示。数值前可加负号表示负值。十六进制...
字符串是MySQL中最常用的数据类型之一,用于存储文本信息。字符串可以通过单引号(' ')或双引号(" ")进行界定,但在非ANSI模式下,仅单引号可用。以下是一些关键的字符串处理概念: 1. **转义字符**:特定的字符...
在MySQL数据库中,有时我们需要对数据进行特定类型的验证,例如判断某个字段是否包含汉字、日期格式是否正确或者字符串是否只包含数字。以下将详细介绍标题和描述中提到的三个MySQL自定义函数,它们可以帮助我们实现...
MySQL中的字符串类型包括SET(集合类型)、BLOB(二进制大对象)、ENUM(枚举类型)、CHAR(固定长度字符串)、TEXT(动态长度字符串)、VARCHAR(可变长度字符串)。 13. 获取MySQL版本: 可以通过执行SELECT ...
MySQL提供多种不同的字符串类型以适应不同的需求: - **CHAR(N)** 和 **VARCHAR(N)**: 用于存储定长和变长的字符数据。`N` 指定最大字符数。CHAR类型会自动在其后填充空格以达到指定长度,而VARCHAR则不会。 - **...
MySQL中的LIKE操作符是用于模糊查询的关键字,它在处理字符串数据时非常有用。LIKE语法简单,通过结合通配符“%”和“_”来实现不同类型的模糊匹配。 1. **“%”通配符**: - `%` 在模式中代表任意数量的字符,...
本文将详细介绍MySQL支持的主要数据类型,包括数值类型、字符串类型、日期时间类型、二进制类型以及特殊类型。 #### 1. 数值数据类型 数值数据类型主要用于处理数字数据,包括整型和浮点型。 - **整型数据类型** ...
在MySQL数据库中,更新表中某个字段并追加字符串是一个常见的操作,这通常涉及到`UPDATE`语句和`CONCAT`函数的使用。`CONCAT`函数用于将多个字符串拼接成一个新的字符串。例如,标题中提到的方法是更新名为`表名`的...
- 字符串函数在使用时应注意区分大小写,MySQL在某些情况下是区分大小写的。 5. 函数的运用实例: - 使用`CONCAT()`函数可以轻松地将多个字段的值拼接在一起,例如,`SELECT CONCAT(first_name, ' ', last_name) ...
`SUBSTRING_INDEX()` 是 MySQL 数据库中的一个常用字符串处理函数,主要用于根据指定的分隔符对字符串进行分割,并返回分割后的子字符串。此函数在处理 URL 或路径等类型的数据时非常有用。 #### 二、函数语法 ```...
5. 相同数据的列名和列类型应保持一致,以保持索引的有效性,提高查询效率。 二、数据库基本设计规范: 1. 使用InnoDB存储引擎,因为它支持事务、行级锁和更好的恢复性,尤其在高并发环境下性能更优。MySQL 5.6及...
`BINARY`关键字在MySQL中用于类型转换,它将字符串转换为二进制字符串,使得在比较时能够区分大小写。当使用`BINARY`修饰符时,即使是同样的字符,只要大小写不同,它们在二进制表示上也会有所差异,因此比较时会视...
MySQL 中有多种字符串类型,包括 SET、BLOB、ENUM、CHAR、TEXT 和 VARCHAR。每种类型都有其特点和应用场景。 存储引擎 MySQL 的存储引擎是指各种技术来存储数据在文件中的机制。常见的存储引擎包括 InnoDB、MyISAM...