数据库字符型字段设计的原则
第二章 字符类型字段概述
类型 长度 使用说明 长度说明
char(n)
定长 索引效率高 程序里面使用trim去除多余的空白 n 必须是一个介于 1 和 8,000 之间的数值,存储大小为 n 个字节
varchar(n)
变长 效率没char高 灵活 n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节
text(n)
变长 非Unicode数据 不用指定长度
nchar(n)
定长 处理unicode数据类型(所有的字符使用两个字节表示) n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍
nvarchar(n)
变长 处理unicode数据类型(所有的字符使用两个字节表示) n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零
ntext(n)
变长 处理unicode数据类型(所有的字符使用两个字节表示) 不用指定长度
2.1 CHAR概述
CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。
2.2 VARCHAR概述
存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
2.3 TEXT概述
text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
2.4 NCHAR、NVARCHAR、NTEXT。
这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
以下字符串:我和coffee
如果设计成varchar字段,则占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。
所以如果字段值只是英文可选择varchar,而字段值如果存在双字节(中文、韩文等)字符时则用nvarchar
综上, 一般来说,如果含有中文字符,用nchar/nvarchar/ntext,如果纯英文和数字,用char/varchar/text。
可以概括成:
CHAR,NCHAR 定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码
第三章 何时会出现此问题
正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,多数情况下,在开发阶段是发现不了的.
当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.这个时候才不会有问题.
但是如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar或者ntext).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.
使用nvarchar的另一个好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.
教参网址:
http://www.cnblogs.com/yelaiju/archive/2010/05/29/1746826.html
分享到:
相关推荐
根据描述,作者倾向于使用字符型而非自增方式,并且在新增记录时由系统自动生成主键值。这种方式具有一定的灵活性,可以根据具体需求定义主键值的生成规则。 #### 三、GUID作为主键的考虑 1. **优点**: - GUID...
4. 主键类型可以是字符型的,我们可以定义一个字段存放一个数值,在生成时,自动加一,然后再存回去。 主键的设计是数据库设计中非常重要的一步。我们应该遵循上述原则,设计一个好的主键,提高数据库的性能和可...
### 数据库设计指南 在企业运营的过程中,数据如同流淌在企业体内的血液一般至关重要,而数据库的设计则成为了确保这些“血液”能够健康...希望这些经验和技巧能帮助读者更好地理解和掌握数据库设计的基本原则和方法。
这种方法是采用 GUID,当然我是推荐主键还是字符型的,但值由 GUID 生成,GUID 是可以自动生成,也可以程序生成,而且键值不可能重复,可以解决系统集成问题,几个系统的 GUID 值导到一起时,也不会发生重复。...
设计触发器的原则 触发器的删除 禁止和允许触发器 触发器应用举例 使用触发器实现审计功能 使用触发器维护数据完整性 使用触发器保障数据安全性 使用触发器派生字段值 第章安全管理 创建角色语句 删除...
数字型字段一般不允许为空,建议设置默认值为0,字符型字段除非是备注或描述,也应避免为空。对于涉及人为操作的表,推荐包含状态字段(state)、操作人ID(staff_id)、操作时间(op_date)以及备注(remark)字段...
### 数据库设计规范详解 #### 一、引言与目的 数据库设计规范旨在明确数据库设计过程中应遵循的一系列...通过以上规范和原则,可以确保数据库设计的一致性、可维护性和高效性,从而更好地支持业务需求和技术发展。
MYSQL 数据库的命名和设计标准中,字符标准是指在命名数据库、表和字段时所遵守的字符规则,包括: * 采用 26 个英文字母(区分大小写)和 0-9 十个自然数, 加上下划线'_' 组成,共 63 个字符。 * 不能出现其他...
第一范式(1NF)是数据库设计的基本原则,要求数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。符合第一范式的数据库表是简洁的,不存在冗余...
- **数据类型**:了解各种数据库系统支持的数据类型,如整型、浮点型、字符串、日期时间等,以及它们在不同场景下的适用性。 - **索引**:索引的作用、类型(B树、哈希索引)以及如何根据查询需求选择合适的索引...
4. **文本字段优化**:尽可能不使用TEXT/BLOB类型,对字符型数据进行压缩或序列化处理。 5. **CHAR与VARCHAR**:对于固定长度的字符串使用CHAR,对于变长字符串使用VARCHAR,并注意存储需求差异。 6. **字符集一致性...
- **数据库字符集选择**: - 采用UTF8字符集以支持多国语言。 - **数据库其他参数配置**: - `DB_FILES`:当文件数量接近或超过200时,设置为`FILES*1.5`。 - `DB_BLOCK_SIZE`: - 数据仓库类型:建议使用较大的...
数据类型的选取也非常重要,应根据实际需求选择最合适的数据类型,如使用整型而非字符型存储数字,以节省存储空间和提升处理速度。 在数据库设计过程中,我们还需要关注范式理论。第一范式(1NF)要求每个字段不可...
这部分通常会介绍课程的目标、内容概览以及数据库的基本概念,包括数据库管理系统(DBMS)、数据模型(如关系型数据模odel)、数据库设计原则等。了解这些基础知识是构建有效数据库应用的前提。 第二章深入介绍了...
在Wo-3G数据库设计中,我们看到了一系列与手机相关的表格,这些表格共同构成了一个完整的手机信息管理系统。下面是每个表的详细说明: ...同时,通过外键机制,确保了数据的一致性和完整性,符合关系数据库的设计原则。
【C#与MySQL数据库课程设计:房屋...通过这个房屋租赁管理系统的设计与实现,学生不仅能掌握C#编程和数据库操作,还能理解软件工程中的分层架构、数据库设计原则以及系统测试等概念,为未来的职业生涯打下坚实基础。
数据库主键设计原则 或许大家都设计过数据库,也为表定义过主键,今天我想阐述的是,应该如何正确的设计一个主键,在以往的一些资料中,都没有提及到主键设计的原则. 我为此总结了一下: 1.是否要采用GUID作为主键 用GUID...