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),保存在行的外部。

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/2701169.html
Copyright © 2011-2022 走看看