• char、varchar、text、nchar、nvarchar、ntext区别说明及SQL字符串常用操作


    快速目录:

    char、varchar、text、nchar、nvarchar、ntext简要说明:

    nchar、nvarchar、ntext中的n代表的是National,即国际化, 也就是代表它们所使用的字符编码为Unicode。

    char与nchar、varchar与nvarchar、text与ntext之间的差别都是一样的, 都是加了n就代表使用Unicode编码, 当使用Unicode编码时, 所有的字符都占用两个字节,而没有加n前缀的类型, 对于英文字符和英文字符, 只会占用一个字节, 而对于其他字符(比如中文、日语等), 会占用两个字节。

    当有如下表定义:

    create table table_1
    (
        id int identity(1, 1) primary key,
        name char(5) not null,
        addresses nchar(5) not null
    )
    

    table_1中name字段定义为char类型, 而addresses定义为nchar类型, 长度同样为5。

    这两个定义的意义为: 字段name可以存储5个英文字符或英文符号, 字段addresses可以存储5个Unicode字符。

    对于字段addresses可以简单的理解为:该字段可以存放5个任意字符, 占有10个字节(对于Unicode编码, 每个字符都占有两个字节)。

    而对于字段name可以简单理解为:该字段可以存放5个字节的内容, 每个英文字符和符号占一个字节, 其他字符(比如中文、日语等)占两个字节。

    上面说明了有n前缀和无n前缀的类型区别, 现在只需要说明char、varchar和text的区别即可了

    对于char类型, SQL Server会为其预留出指定的空间, 不论其内容实际为多少, 它所占的空间都是固定的,而对于varchar类型, SQL Server会按保存的实际长度来分配空间(外加两个额外的字节空间, 以保存数据的偏移值)。  当然, 以上两种类型的定义中, 内容所占的空间都是不允许超过定义的空间的。

    有如下表定义:

    create table table_2
    (
        id int identity(1, 1) primary key,
        name char(10) not null,
        addresses varchar(20) not null
    )
    

    若执行语句:insert into table_2 values('mine', 'here');

    虽然'mine'只有四个字节的长度, 但它实际所占的空间还是name字段定义的10个字节空间;而addresses的类型为varchar所以其实际所占空间为4个字节。

    char与varchar进行对比, 它们的优缺点在于:

    • char优点:占用空间固定,在对其进行更新操作时, 不需要分配空间和移动数据, 执行速度相对较快。
    • char缺点:占用空间固定,可能会浪费空间, 而且在进行读取操作时, 也因此导致读取速度相对较慢。
    • varchar优点:占用空间随实际内容变化, 不会浪费存储空间, 在进行读取操作时, 因为不用读取多余的无内容字节空间, 所以速度相对较快。
    • varchar缺点:所占空间刚好是内容所占的空间, 所以在对其进行更新操作时, 会需要扩展空间, 会需要移动数据, 这样会使更新操作的速度相对较慢。

    对于text类型, 由于char和nchar都有长度或空间限制(char最大长度为8000,nchar最大长度为4000), 而有些内容可能远远超出这个长度, 所以需要以另一种类型来进行存储, 也就是text(最大可存储2GB的内容)。

    字符串常用操作:

    简易导航:

    01.substring(string, start, length)

      其含义为:从string的第start个字符开始, 取length个字符

      eg:print substring('I miss you', 3, 4);

      输出结果:miss

    02.left(string, length)

      其含义为:从string的左边开始,取length个字符

      eg:print left('miss you', 4);

      输出结果:miss

    03.right(string, length)

      其含义为:从string的右边开始,取length个字符

      eg:print right('miss you', 3);

      输出结果:you

    04.len(string)

      其含义为:计算string的长度(忽略字符串尾部的全部空格)

      eg:print len('miss 你');

      输出结果:6

    05.datalength(string)

      其含义为:计算string所占的字节数

      eg:print datalength('miss 你');

      输出结果:7

    06.charindex(substring, string[,start_pos])

      其含义为:在string中查找substring,并返回查找到的第一个substring所在的位置,若未找到,则返回零。第三个可选参数start_pos是指从string的第start_pos个字符后开始查找。

      eg_1:print charindex('-!', 'just-!running-!');

      输出结果:5

      eg_2:print charindex('-!', 'just-!running-!', 6);

      输出结果:14

    07.patindex(pattern, string)

      其含义为:在string中查找能匹配pattern模式的子字符串,并返回其位置, 若未找到匹配子字符串, 则返回0。(pattern与like后的匹配字符串相同)

      eg:print patindex('%o%', 'waiting for you');

      输出结果:10

    08.replace(string, substring1, substring2)

      其含义为:将string中的substring1全部替换为substring。

      eg:print replace('十是十四是四', '是', '十');

      输出结果:十十十四十四

    09.replicate(string, n)

      其含义为:将string复制n次

      eg:print replicate('yo', 3);

      输出结果:yoyoyo

    10.stuff(string, pos, delete_len, insert_str)

      其含义为:从string的pos位置开始, 删除delete_len个字符, 然后在此位置插入insert_str

      eg:print stuff('wow', 2, 1, 'mom');

      输出结果:wmomw

    11.upper(string)

      其含义为:将string全部转换为大写(对非英文字母的字符无效)

      eg:print upper('你是Shui');

      输出结果:你是SHUI

    12.lower(string)

      其含义为:将string全部转换为小写(对非英文字母的字符无效)

      eg:print lower('你是sHUI');

      输出结果:你是shui

    13.rtrim(string)

      其含义为:去除string右边的空格符(r代表right)

      eg:print rtrim('   rtrim   ')

      输出结果:'   rtrim'

      (实际输出结果中没有两个单引号, 这里的单引号是为了能够看到结果中的空格符)

    14.ltrim(string)

      其含义为:去除string左边的空格符(l代表left)

      eg:print ltrim('   ltrim   ')

      输出结果:'ltrim   '

      (实际输出结果中没有两个单引号, 这里的单引号是为了能够看到结果中的空格符)

  • 相关阅读:
    温故而知新-错误和异常处理
    温故而知新-面向对象的PHP
    Django框架之模板语法【转载】
    django2.0实现数据详情页展示的流程
    django2.0表的ORM字段类型和展示
    Fatal error: Cannot use object of type PHPExcel_RichText as array
    django2.0数据展示流程
    django2.0模板相关设置
    django2.0新增功能流程
    django2.0设置默认访问路由
  • 原文地址:https://www.cnblogs.com/hourglasser/p/3351693.html
Copyright © 2020-2023  润新知