当前位置: 首页 > news >正文

一个关于空格的Sql Server面试题

引子

先上题目:

回答下面sql 的输出结果

declare @s1 varchar(10)
declare @s2 varchar(10)
set @s1='a b'
set @s2='a b' 

if @s1=@s2 select 'true' 

答案是 true

那么上面的 s1 和 s2 是否相等的呢?

我们再看看下面的sql

declare @s1 varchar(10)
declare @s2 varchar(10)
set @s1='A b'
set @s2='A b'  
if @s1=@s2 select 'true' 

答案也是 true

这道面试题的目的是以题目为契机,引出数据库下面的知识点:

1、字符串字段

2、排序规则

3、排序规则和相等的关系

分析

我们开始分析s1 和  s2 这俩字符串。他们是否相等,如果我们用c++、delphi、C# 等语言来判断,显示是不等,但是在sql server中,有时候是相等的(如上图)。

sql server 和 c++、delphi、C# 的运算 结果不一样,他们之中谁错了?

他们都没有错,因为他们都是按照自己的规则运算的。c++、delphi、C#等语言是字符串处理,俺就不谈了,C++的字符串操作可以写半本书。

我们先从 sql server的字符串类型开始说,sql server的字符串类型常用的有:

  • char(32)
  • varchar(31)
  • nchar(31)
  • nvarchar(31)
  • text
  • varchar(max)
  • nvarchar(max)

除了类型之外,还要一个需要的注意的就是排序规则。

执行SELECT DATABASEPROPERTYEX('master', 'Collation')

在Chinese_PRC_CI_AS下,上面的s1  和  s2 的每个字符的排序是一致的,所以 sql server 认为 s1 和 s2 是相等的。由此可以看出,在 sql server 中的字符串比较是按照Chinese_PRC_CI_AS进行计算的。

另:Chinese_PRC_CI_AS

Chinese_PRC_CI_AS,前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。

排序规则的后半部份即后缀 含义:
_BIN: binary sort 二进制排序
_BIN2:binary code point comparison sort
_AS、_WS等选项的字母代表的意义如下:
C:case,大小写
A:accent,重音
K:kanatype,假名
W:width,宽度
I:insensitive, 不敏感,不区分
S:sensitive,敏感,区分
如 CI 就是case-insensitive,不区分大小写。
更详细说明:
_CI(CS) :是否区分大小写,CI不区分,CS区分。
_AI(AS) :是否区分重音,AI不区分,AS区分。
_KI(KS) :是否区分假名类型,KI不区分,KS区分。
_WI(WS) :是否区分宽度 WI不区分,WS区分。
提示说明:
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项。比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • shinydashboard与shiny详细教程
  • # Kafka_深入探秘者(2):kafka 生产者
  • 如何让视频有高级感 高级感视频制作方法 高级感视频怎么剪 会声会影视频剪辑制作教程 会声会影中文免费下载
  • [Linux] 文件/目录命令
  • MySQL学习笔记-进阶篇-锁
  • 反射机制详解
  • 6 DSL_03地理信息查询相关性算分
  • std::function和std::bind函数
  • MyBatis-Plus入门教程(一)
  • Day11 —— 大数据技术之Spark
  • C#的膨胀之路:创新还是灭亡
  • npm i 报错 gifsicle pre-build test failed
  • 零撸广告创业项目:撸包小游戏对接广告联盟app开发
  • sh脚本模块笔记
  • C语言入门4-函数和程序结构
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java基本数据类型之Number
  • React Native移动开发实战-3-实现页面间的数据传递
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 搭建gitbook 和 访问权限认证
  • 高程读书笔记 第六章 面向对象程序设计
  • 后端_MYSQL
  • 使用Swoole加速Laravel(正式环境中)
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 详解移动APP与web APP的区别
  • 学习使用ExpressJS 4.0中的新Router
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Python 之网络式编程
  • !$boo在php中什么意思,php前戏
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #pragma data_seg 共享数据区(转)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (南京观海微电子)——示波器使用介绍
  • (五)c52学习之旅-静态数码管
  • (五)IO流之ByteArrayInput/OutputStream
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)Dubbo快速入门、介绍、使用
  • (转)Scala的“=”符号简介
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .naturalWidth 和naturalHeight属性,
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NetCore发布到IIS
  • .Net插件开发开源框架
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .net中生成excel后调整宽度
  • 。。。。。
  • [04]Web前端进阶—JS伪数组
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [20170713] 无法访问SQL Server
  • [2021 蓝帽杯] One Pointer PHP