zoukankan      html  css  js  c++  java
  • 处理字符数据数据类型

      SQL Server支持两种字符数据类型——普通字符和Unicode字符。普通字符数据类型包括CHAR和VARCHAR,Unicode字符数据类型包括NCHAR和NVARCHAR。它们二者的区别是:普通字符使用一个字节(byte)来保存每个字符,而Unicode字符则需要两个字节。当使用普通字符类型时,由于一个列只用一个字节来保存每个字符,所以就限制在这个列中只能使用英语这一语言,因为一个字节只能代表256(2^8)个不同的字符。一个列所支持的语言是由列的有效排序规则(collation)属性决定的。当使用Unicode数据类型时,一个列可以代表65535(2^16)个不同的字符,因为这时用两个字节来保存每个字符。所有语言都可以用相同的Unicode码来表示,这样,当某个列使用了Unicode数据类型时,就可以在这个列中混合多种语言,而不必只局限于英语。

      在字符常量的表示方式上,这两种字符数据类型也有所不同。当表示一个普通的字符常量时,值需要简单地使用单引号:'This is a regular character string literal'。当表示一个Unicode类型的字符常量时,需要在前面指定一个字符N(代表National)作为前缀:N'This is a Unicode character string literal'。

      名称中不包含VAR元素的任何数据类型都是固定长度的(CHAR,NCHAR),对于这样的类型,SQL Server会按照为列定义的大小,在行中为该列预留出固定的空间,所以该列的长度并不是字符串中字符的实际个数。例如,如果将一个列定义为CHAR(25),SQL Server就会在行中为这个列预留出25个字符的空间,而不考虑其中保存的字符串的实际长度。因为当需要扩展字符串时,在行中无法进行扩展,所以固定长度的数据类型更适合于以写入为主的(write-focused)系统。但因为这种类型的存储消耗不是最优的,所以在读取数据时可能要付出更多的代价。

      名称中含有VAR元素的数据类型是可变长度的(VARCHAR,NVARCHAR),SQL Server在行中会按字符串的实际长度来保存数据,外加两个额外的字节以保存数据的偏移值(offset data)。例如,如果将一个列定义为VARCHAR(25),就意味着它应该最多支持25个字符,在实际使用中,存储空间有字符串中字符的实际数量来决定。与固定长度类型相比,可变长度类型消耗的存储空间更少,所以读取操作也会更快。不过,更新数据时可能需要对行进行扩展,导致数据移动,超出当前页的范围。因此,与固定长度的数据类型相比,对具有可变长度数据类型的数据进行更新的效率会有所降低。

      在定义可变长度的数据类型时,可以使用MAX说明符,而不必指定字符的最大数量。当用MAX说明符来定义一个列时,可以把一个值直接保存到行的内部,其长度具有一定的上限(默认是8000字节)。大小超过该上限的值将作为大型对象(LOB,large object),保存在行的外部。

  • 相关阅读:
    GPU上的随机森林:比Apache Spark快2000倍
    基于TensorFlow2.x的实时多人二维姿势估计
    用code2vec、glow和spaCy进行词嵌入
    如何进行数据科学竞赛?(EDA)
    Python性能分析技巧
    PyTorch中基于TPU的FastAI多类图像分类
    GitHub上的AutoML
    Keras vs PyTorch vs Caffe:CNN实现对比
    深度学习的学习率调节实践
    win7下MariaDB10.0的my.ini配置文件的位置
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/2701169.html
Copyright © 2011-2022 走看看