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

  • 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. erlang热部署

    以下流程参考rebar的wiki,亲测 rebar的版本一定要注意,高版本对于下面两个指令有bug rebar generate-appups rebar generate-upgrade 经过一个个 ...

  2. 使用Collections类对 集合排序

    对Set<Object>集合进行排序 根据类型的某一个属性去排序 public Set<School> sortByValue(Set<School> set){ ...

  3. PTA 银行排队问题之单队列多窗口服务(25 分)

    银行排队问题之单队列多窗口服务(25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假 ...

  4. kali 软件源 包含virtualbox所需头文件

    # deb cdrom:[Debian GNU/Linux 7.0 _Kali_ - Official Snapshot i386 LIVE/INSTALL Binary 20130905-08:50 ...

  5. Java标准I/O流介绍

    1.I/O是什么? I/O 是Input/Output(输入.输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出. 2.流 流是一个连续的数据流,可以从流中读取数据,也可以往流中写数据.流与 ...

  6. Kali终端美化

    首先安装figlet和cowsay root@sch01ar:~# apt-get install figlet root@sch01ar:~# apt-get install cowsay 用lea ...

  7. 我是怎么用python模仿勒索软件加密文件的(病毒)

    前言: 今天下午上学,用python写个勒索脚本然后打包成exe是个不错的选择 我们来搞事情吧.看那学校我就不想上学. 0x01:要用到的模块,各位请自行准备 import win32api,win3 ...

  8. 分布式爬虫搭建系列 之四---scrapy分布式框架

    带录入SAFCDS 

  9. Color the ball (线段树的区间更新问题)

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...

  10. 关闭SublimeText自动更新

    [关闭SublimeText自动更新] 1.找到Preferences -> Settings-User(设置用户) 2.在最后一个花括号结尾(“}”)前添加一句:”update_check&q ...