`
weitao1026
  • 浏览: 1047900 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库中CHAR,VARCHAR,TEXT等字段的区别

 
阅读更多

开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西。当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个。在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教。

1、CHARCHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()

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

3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4、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

它们的区别概括成:
CHAR,NCHAR 定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码
 
 
varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unicode来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节. 
  正常情况下,我们使用varchar
也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署
  
当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
  所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.的时候也不会有问题.
  但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.
  使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.
分享到:
评论

相关推荐

    MySQL中字段类型char、varchar和text的区别

    在MySQL数据库中,字段类型的选择...综上所述,理解并正确选择`char`、`varchar`和`text`字段类型对于优化MySQL数据库性能至关重要。在设计数据库结构时,应根据数据特性和需求谨慎选择,以实现最佳的存储和查询效率。

    varChar和Char之间的区别?

    在数据库管理领域,尤其是MySQL这样的关系型数据库系统中,数据类型的选择对于...因此,当设计数据库表结构时,应根据数据的特性和业务需求,谨慎选择`char`、`varchar`、`text`、`nchar`或`nvarchar`等字符串类型。

    通达OA2013数据库字典(含全部字段注释)20130706.docx

    通达OA2013自动化办公系统的MYSQL数据库字段文档中,包含了多个表的字段信息,以下是对这些字段的详解: ### address 表 address 表用于存储通讯簿信息,字段信息如下: * ADD_ID:自增唯一 ID,int(11)类型 * ...

    char、varchar、nchar、nvarchar四种类型的区别

    ### char、varchar、nchar、nvarchar 四种类型的区别 在数据库设计中,选择合适的字段类型对于确保数据的准确性和提高查询效率至关重要。对于字符类型的字段,SQL Server 提供了 `char`、`varchar`、`nchar` 和 `...

    hibernate使用中与各种数据库字段类型对应类型训练

    3. **字符型**:CHAR、VARCHAR、TEXT等。Hibernate使用`java.lang.String`来映射。 4. **日期时间型**:DATE、TIME、TIMESTAMP。Hibernate提供了`java.util.Date`、`java.sql.Time`和`java.sql.Timestamp`来对应。 ...

    SQL数据库字段类型详解

    ### SQL数据库字段类型详解 #### 1. Bit 数据类型 - **描述**:Bit数据类型是一种整型数据类型,仅能存储三个值:0、1 或 NULL。这种数据类型非常适合用于存储二进制选择(例如 Yes/No、True/False、On/Off)的情况...

    MSSQL中所有字段类型的区别

    一、char、varchar、text 和 nchar、nvarchar、ntext 的区别 char、varchar、text 是用于存储字符串类型的数据,而 nchar、nvarchar、ntext 是用于存储 Unicode 字符串类型的数据。 1. char char 类型用于存储定...

    深入char、varchar、text和nchar、nvarchar、ntext的区别详解

    很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把...

    MySql数据库的列类型(字段类型).pdf

    MySQL 数据库中的列类型,也就是字段类型,是数据库设计中的关键元素,决定了数据的存储方式和处理方式。列类型分为三大类:数值类、字符串类和日期/时间类。 数值类数据列类型主要包括整型和浮点型。整型又分为 ...

    SQL数据库的学习总结部分

    在SQL数据库中,常见的数据类型有char、varchar、text、nchar、nvarchar和ntext等。 1. char:char类型存储定长数据,char字段上的索引效率高,但存储大小固定,不足的自动用空格填充,读取时可能需要用到trim()。 ...

    第 数据库中的表PPT教案.pptx

    SQL Server 2005提供了多种内置的数据类型,如字符型(Char、Varchar、Text)、数值型等。例如,Char类型是固定长度的字符数据,适合存储长度固定的文本,如邮政编码;Varchar是可变长度的字符数据,更节省空间,...

    数据库面试专题及答案.pdf

    本资源摘要信息涵盖了 MySQL 中的各种知识点,包括事务隔离级别、ENUM 的用法、CHAR 和 VARCHAR 的区别、存储引擎、TIMESTAMP 的使用、主键和候选键的区别、MySQL 数据库服务器性能分析的方法命令、LIKE 和 REGEXP ...

    sqlserver数据库类型对应Java中的数据类型

    SQL Server 数据库类型对应 Java 中的数据类型 SQL Server 是一个关系数据库管理系统,Java 是一个广泛使用的编程语言。在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC ...

    数据库重要知识点梳理

    日期时间类型字段在数据库中有多种类型,如DATETIME、TIMESTAMP、DATE、YEAR和TIME。每种类型占用不同的存储空间,并有特定的取值范围。例如,DATETIME类型占用8个字节,可以存储从1000年到9999年的日期时间数据。 ...

    mysql-存储引擎和数据库对象实验五.docx

    本实验报告主要介绍 MySQL 中的存储引擎和数据库对象,涵盖了 MEMORY 存储引擎、MERGE 存储引擎、CHAR、VARCHAR、TEXT、BLOB 等类型的使用和特点,以及浮点数、定点数、日期类型的使用和设置规则。 一、MEMORY 存储...

    MySQL数据库基础面试知识点

    * 字符串型包括 CHAR 和 VARCHAR 等。 * 文本型包括 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT 等。 * 二进制类型包括 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB 等。 数据库基本操作 * 创建数据库:CREATE DATABASE...

    网上购物商城数据库设计

    数据字典是用来记录数据库中各种数据元素(表、字段等)的定义和描述的集合。接下来,我们将详细介绍各个表的结构和字段定义。 #### 四、数据字典 **4.1 系统管理员表(tb_Admin)** - **表名**:`tb_Admin` - **...

Global site tag (gtag.js) - Google Analytics