--=====================================================
字符集

  • ASCII (American Standard Code for Information Interchange) :使用8个bytes表示一个字符
  • UNICODE:使用16个bytes来存储一个字符
  • ASCII 在不同的系统或平台上会有1)相同的数字代表不同的含义,2)相同的符号有不同的编码,因此不利于系统间系统数据交换
  • Unicode更通用,但占用的空间也更多
  • 依据将UNICODE字符编码后使用的空间分成UTF-8,UTF-16以及UFT-32
  • SQL Server提供多种排序规则来处理字符串排序。

--====================================================
常用函数:

使用LEN来查看字符串的字符数

SELECT LEN('ABC你好')

-----------------------------------------------------------

使用DATALENGTH来查看字符串的占用空间

SELECT DATALENGTH('ABC你好')

-----------------------------------------------------------

使用CHARINDEX来查看某个字符串在

SELECT CHARINDEX('a','bcabc')

----------------------------------------------------------

使用PATINDEX来匹配字符

SELECT PATINDEX('%[吖-座]%','12你好0')

---------------------------------------------------------

CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。

PATINDEX 可使用通配符,而 CHARINDEX 不可以。

--------------------------------------------------------

使用SUBSTRING来截取字符串(字符串的起始位置1)

SELECT SUBSTRING('123',2,1)--结果2

--------------------------------------------------------

使用REPLICATE来复制字符串

SELECT REPLICATE('ABC',2)

-------------------------------------------------------

使用REVERSE来反转字符串

SELECT REVERSE('ABCD123')

-----------------------------------------------------

在LIKE查询时,.匹配单个字符,%匹配任意长度字符,如果要防止转义,可

1> C1 LIKE '%[.]%'

2> C1 LIKE '%.%' ESCAPE '.'

--=======================================================

变长和定长类型的区别:

1>对于VARCHAR 和NVARCHAR列 ,NULL值和空字符串不占用存储空间

2>对于CHAR 和NCHAR列 ,NULL值和字符串与其他非空字符串占用同样的存储空间

3>由于CHAR 和NCHAR数据占用空间固定,可以很快定位到数据,因此在查询时速度较快

4>VARCHAR和NVARCHAR 列需要额外的两个字节来记录列实际长度,查询时需要计算偏移量

5>CHAR和NCHAR 列中数据不够的加空格补上,在各行数据变化较大情况下,可能会造成较多的空间浪费(如使用CHAR(500)来存放平均长度只有10的数据)

6>对于长度较小数据, 可以使用CHAR或 NCHAR来提高性能

7>类型优先级(从高到低)nvarchar(包括 nvarchar(max))  >> nchar >>varchar(包括 varchar(max))  >> char
 --=======================================================

unicode和非unicode的区别

这并不是个纠结的问题,而是对与错的问题,如果你的数据列只存放一种语言的数据,且数据列使用的排序规则和存放的数据时同一语言下,那么使用char和varchar来存放没有问题,如果不是一种语言,那么老老实实使用nchar和nvarchar吧。

为什么char和varchar也能存放中文字符?

当数据列使用的排序规则是诸多中文排序规则下一种时,那么中文字符可以被成功地解码存放到数据库中,在读取时被成功解码回中文字符,因此没有乱码情况。但如果该数据列存放阿拉伯字符,就会出现乱码情况。

如:SELECT '你好--hello-- مرحبا ',N'你好--hello-- مرحبا '

字符串在varchar和nvarchar下数据占用情况?

对于varchar类型,英文字符(包含阿拉伯数字)占用一个字节的空间,非英文字符占用两个字节空间(无论是否乱码)

对于nvarchar类型,英文字符和非英文字符都占用两个字节空间

为什么仍有人使用char和varchar来存放含有中文字符的数据?

在数据列只存放一种语言数据情况下,如果该列数据可能包含大量英文字符,那么使用char和varchar可以有效减少数据占用的空间,因此可以在一定程度上减小IO消耗从而提升性能。

PS1: 请注意前提条件。

PS2:如果列中数据大部分是非英文字符或不确定会不会存放其他语言字符的话,还是使用nchar和nvarchar吧

如果你尝试在中文排序规则下测试日文,会发现没有乱码,小伙伴请不要惊讶,因为日文那些字符都能在汉字字典里看到哦!

--=============================================================================

依旧是妹子

DateType--字符类型的更多相关文章

  1. 交叉报表列头排序时遇到的oracle问题—oracle ORA-12704:字符集不匹配、varchar2转化为nvarchar2字符缺失、case when else后的字符类型要一致

    在做交叉报表列头的排序时,遇到这三个问题,下面具体来说一下. 设计的数据库的表结构如图1所示: 图1 要处出来student_name_,s.grade_,s.subject_name_,这三个属性, ...

  2. 2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语

    数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6 ...

  3. ABAP 使用的字符类型

    1.ABAP基本数据类型 类型        描述                属性 C            字符类型           默认长度1,最大长度不限N            数字类 ...

  4. 【笨嘴拙舌WINDOWS】字符类型与字符串

    "我将用C语言作为工具,开始WINDOWS API的使用" windows NT 从底层开始支持unicode. 1.字符类型 WINDOWS的字符类型在WINNT.H和CTYPE ...

  5. js密码的校验(判断字符类型、统计字符类型个数)

    /** *判断字符类型 */ function CharMode(iN) { if (iN >= 48 && iN <= 57) //数字 return 1; if (iN ...

  6. 返璞归真vc++之字符类型

    在今天,大量使用java与.net的程序员已经很少去真实了解字符的底层表达,但是使用VC++编程,对字符的处理却非常慎重,刚学习vc++肯定会为其中的字符类型给晕头转向,今天本人学习第一节,从字符开始 ...

  7. Python 基础-python环境变量、模块初识及字符类型

    (1).模块内置模块.第三方模块.自定义模块初识模块:sys \ os一般标准库存放路径 C:\Users\Administrator\AppData\Local\Programs\Python\Py ...

  8. Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单

    原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...

  9. Python判断输入字符类型

    """从键盘上输入 一个字符,判断其字符类型.""" while True: char = input("请输入需要判断的字符:& ...

  10. Java开发笔记(三十一)字符类型的表达

    前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机.若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大 ...

随机推荐

  1. simple_one_for_one 和 one_for_one的区别

    参考这里http://blog.sina.com.cn/s/blog_77cb45a70102v1ja.html 用起来最直观的不同点 simple_one_for_one需要手工start_chil ...

  2. Linux面试题大全(带答案)

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标识. ...

  3. 概念与用法-cookie,session,auth (认证系统)

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  4. Java微信公众平台开发(四)--回复消息的分类及实体的创建

    转自:http://www.cuiyongzhi.com/post/42.html 前面有说道对接收到微信服务器消息后对消息的分类,当时主要分为普通消息和事件消息,这里我们要讲述的是我们在给用户回复的 ...

  5. PHP框架 Laravel

    PHP框架 CI(CodeIgniter) http://www.codeigniter.com/ http://codeigniter.org.cn/ Laravel PHP Laravel htt ...

  6. apache配置多个虚拟主机 localhost访问不了解决方案

    在httpd-vhosts.conf,重定向localhost <VirtualHost *:80>    ServerAdmin webmaster@dummy-host2.exampl ...

  7. Python编程总结之常用三方模块

    1.excel读写 利用python进行excel读写是经常遇到的事情,最常用的excel读写模块必属xlrd和xlwt,前者负责读,后者负责写,配合起来可实现读写. 举例1):使用xlrd读取exc ...

  8. 关于FPGA设计16位乘法器的两…

    原文地址:关于FPGA设计16位乘法器的两种算法作者:ChrisChan 部分原代码如下: 用特权的右移算法虽复杂点,但节省不少LEs,如下图: 用左移算法尽管浅显易懂,但因每次都会从最右端移位,会占 ...

  9. javascript的加载、解析、执行对浏览器渲染的影响

    javascript的加载方式,总得来说是在页面上使用script来声明,以及动态的加载这些方式,而动态的加载,在很多js库中都能够很好的去处 理,从而不至于阻塞其他资源的加载,并与其并行加载下来.这 ...

  10. c语言学习笔记-if语句块一定要加分号

    if(a>6) printf("hello");//语句1 printf("world");//语句2 当a>6的时候,执行的分支语句是语句1,而不 ...