首页 > 数据库 >SQLServer 字符集的学习与验证

SQLServer 字符集的学习与验证

时间:2024-01-30 16:14:34浏览次数:27  
标签:name 验证 SQLServer 字符集 UTF8 id SELECT

SQLServer 字符集的学习与验证


背景

因为开发JDBC for SQLServer的一群大佬自作主张的进行了 AsUnicode的默认参数值设置.
导致数据库采用了 varchar的列 到出现了隐式转换,有非常大的性能损耗.

单独改过来又担心出现乱码的问题(毕竟这个比较2的选项就是为了解决乱码问题)
没办法的情况下,只能学习一下数据库的相关设置, 但是检查思路比较稀缺

判断 nationaltion的字段数量

select * from sys.types 
主要有如下三个:
ntext 99 nchar 239 nvarchar 231

然后判断数据库中存在的列
注意 id 是我这边自己查的. 

SELECT
	col.name column_name ,
	obj.name table_name
FROM
	sys.columns col
	INNER JOIN sys.objects obj ON col.object_id = obj.object_id 
WHERE
	col.system_type_id IN ( 99, 231, 239 ) AND 
	col.object_id IN ( SELECT object_id FROM sys.objects WHERE schema_ID = 5 ) 
ORDER BY
	2


查看数据库的字符集以及codepage

SELECT SERVERPROPERTY(N'Collation')
SELECT COLLATIONPROPERTY( 'chinese_prc_ci_as', 'codepage' )
第二条查询结果很明显的就是CP936 与windows 系统使用的 GBK字符集是相同的代码页

需要注意 微软从 SQL2019开始支持UTF8
他的字符变的更多了:
SQLServer2012支持的字符集为: 3885条
SQLServer2022支持的字符集为: 5508条

他增加的字符集比如:
SELECT COLLATIONPROPERTY( 'Chinese_Simplified_Pinyin_100_CI_AS_SC_UTF8', 'codepage' )

需要说明
select * from fn_helpcollations() where name like '%chinese%' and name like '%utf8%'
可以看到与之前字符集比较相同的一个:
Chinese_PRC_90_CI_AS_SC_UTF8
Chinese-PRC-90, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive, supplementary characters, UTF8

需要说明的是 90/100的关系 100 好像是更新版本的 unicode字符集的含义

一些简单理解

SQLServer 的字符集非常多, 主要是微软的本地化做的足够牛B.
使用GBK字符集时出现 ASCII之外都是双字节字符. 非常便于计算,性能也好,兼容性也好. 

改用UTF8之后会变成变长字符集, 需要进行一定程度的判断,所以性能会比较差. 

理论上改用utf8之后没必要使用 nvarchar的字符类型了.
nvarchar sqlserver 一般默认存 unicode编码. oracle存储的是 utf16编码(Oracle跟java和js类似. )

标签:name,验证,SQLServer,字符集,UTF8,id,SELECT
From: https://www.cnblogs.com/jinanxiaolaohu/p/17997321

相关文章

  • Java 系统学习 | Springboot 数据验证
    本篇使用Springboot3框架,IDEA2022编辑器,java17版本。在上一篇的基础上进行优化添加依赖在pom.xml中添加依赖,记得更新maven<!--validation依赖--><dependency><groupId>org.springframework.boot</groupId><artifactI......
  • 服务器需要使用第三方系统时需要登录验证
    创建第三方登录认证和凭证信息HttpHosttargetHost=newHttpHost(host,newInteger(port).intValue(),"http");CredentialsProvidercredentialsProvider=newBasicCredentialsProvider();credentialsProvider.setCredentials(newAuthScope(targetHost.getHostName(),targ......
  • 使用阿里云短信验证
    1、登录阿里云2、设置AccessKey 3、由于安全性,此处使用子用户4、点击用户5、创建子用户AccessKey 6、授权7、注意授权主体等8、按照示例代码编写发送短信接口9、注意:需要提前申请好模板和签名等 ......
  • 鸿蒙首批原生应用!顶象无感验证已适配鸿蒙系统
    顶象无感验证已成功适配鸿蒙系统,成为首批鸿蒙原生应用,助力鸿蒙生态的快速发展。作为全场景分布式操作系统,鸿蒙系统旨在打破不同设备之间的界限,实现极速发现、极速连接、硬件互助、资源共享。迄今生态设备数已突破8亿台,更有涵盖便捷生活、出行文旅、金融理财、社交资讯、生产力工......
  • 4.Binding类之转化器和验证规则
    转化器IValueConverter接口Binding类还有一个Converter属性,其实,它是一个IValueConverter接口。它的主要作用是:前后端建立绑定时,定义一套自定义逻辑,让前端显示的数据与后端获取的数据建立一定的对应关系。比如Person对象有一个年龄(Age)属性,我们在前端显示某个人的年龄时,可以根据......
  • SqlServer中使用游标遍历数据集合
    具体代码如下所示:/***************************************** 实例:打印输出数据表BUS_Test中的Name和Age字段的值*****************************************/--声明遍历@Name和@AgeDECLARE@NameNVARCHAR(50),@AgeINT--声明游标C_UserDECLAREC_UserCURSORFAST_FOR......
  • SqlServer性能检测之Sql语句排查
    很多时候,我们在用SQL语句查询数据时,难免会漏掉对SQL语句性能的考虑,所以有时就会造成SqlServer服务占用过高的问题,为了大致排查是哪些SQL语句造成的问题,我们可以通过如下SQL查询出最近所有耗时最大的SQL语句,具体查询SQL语句如下所示:SELECTs2.dbid,s1.sql_handle,......
  • SqlServer还原数据库出现“无法在服务器上访问指定的路径或文件”提示的解决办法
    1、......
  • DBeaver连接SqlServer报“The server selected protocol version TLS10 is not accept
    1、......
  • go中间件实现登录验证
    一、概述在java中可以使用过滤器、拦截器实现登录验证(验证token的有效性、判断哪些路径需要登录、哪些路径不需要登录)等等的一些公共性的验证操作。go语言中有没有类似的东西呢,答案是有的,go语言中可以使用中间件来完成这个操作。接下来使用gin+中间件的形式来验证t......