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

  • 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. WIN10运行软件,窗口不显示(移动到屏幕外无法复原)的解决办法 Lebal:bug10解决方案

    双显示器切换回单显示器的时候,可能会遇到窗口移动到屏幕外不显示的情况 像这样虽然有缩略图但是点击无反应,并且平铺窗口也不管用,这个时候单击该窗口,Alt+space 执行最小化以及最大化操作即可复原

  2. python开发函数进阶:内置函数

    一,内置函数 #内置的模块#拿过来直接就用的:内置的函数 #!/usr/bin/env python #_*_coding:utf-8_*_ #内置的模块 #拿过来直接就用的:内置的函数 #作用域相关 ...

  3. maven学习1

     1.Maven的约定 src/main/java: 存放项目的java文件. src/main/resources: 存放项目的资源文件,如spring,hibernate的配置文件. src/te ...

  4. 第七章 JVM体系结构与工作方式

    JVM能跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台的软件和硬件之间的差异. 7.1 JVM体系结构 7.1.1 何谓JVM 模拟一个计算机来达到一个计算机所具有的计算 ...

  5. socket通讯实例与TCP/UDP的区别

    一.socket代码实例 1.简单的socket通讯: 服务端代码实例: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_ ...

  6. 用css实现图片在div内的垂直居中

    已知一个div内有一个img,两者的高度均不知道,但图片的高度一定小于div的高度 代码如下: .box { /*非IE的主流浏览器识别的垂直居中的方法*/ display: table-cell;  ...

  7. sql代码段添加数据

      declare @i int,@index int     set @i=1     set @index=0   while @i<1000000   begin    set @inde ...

  8. 整理出一个比较实用的SqlHelper类 满足大多数情况的使用

    /// <summary> /// SqlHelper类 by zy 2016-3-11 /// </summary> public sealed class SqlHelpe ...

  9. JS 实现 unicode 中文互转

    // 转为unicode 编码 function encodeUnicode(str) { var res = []; for ( var i=0; i<str.length; i++ ) { ...

  10. 客户端级别的渲染分析工具 dynaTrace

    dynaTrace Ajax Edition是一款很好的javaScript性能分析工具.目前支持IE和Firefox 2款浏览器. dynaTrace如图所示: 点击Click here to st ...