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

  • 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. gitlab的本地搭建和部署使用

    公司现在的代码管理是在公司的服务器上部署了gitlab,这样既方便协同开发,有可以很好的保护代码的安全性. 那么我们就来研究一下 如何给自己的服务器上部署gitlab吧! 学习源头:https://w ...

  2. 2016女生赛 HDU 5710 Digit-Sum(数学,思维题)

    Digit-Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total S ...

  3. spring-cloud配置高可用eureka服务端

    spring-cloud配置eureka服务端 eureka用来发现其他程序 依赖 <?xml version="1.0" encoding="UTF-8" ...

  4. Python Twisted系列教程10:增强defer功能的客户端

    作者:dave@http://krondo.com/an-introduction-to-asynchronous-programming-and-twisted/ 译者:杨晓伟(采用意译) 可以从这 ...

  5. 2014.8.8 CAD系统连接

    CDA数据库连接生产库.研发库.临时库对应3个连接名 cad = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = backupserver)(POR ...

  6. Java 查询数据后进行递归操作

    java的递归方法记录: private List<Map<String, Object>> generateOrgMapToTree(List<Map<Strin ...

  7. 优化深度神经网络(三)Batch Normalization

    Coursera吴恩达<优化深度神经网络>课程笔记(3)-- 超参数调试.Batch正则化和编程框架 1. Tuning Process 深度神经网络需要调试的超参数(Hyperparam ...

  8. pandas层级索引

    层级索引(hierarchical indexing) 下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引. ...

  9. jaxb 专题一(JAXB 实现java对象与xml之间互相转换)

    首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ...

  10. 第一次调用Web service响应速度慢的解决办法

    Env: Client: WinForm(Net Framework 2.0) Server:Web Service(Net Framework 4.0) Problem: Client use pr ...