SQLServer特殊字符/生僻字与varchar
首先是特殊字符如上下标或版权字符,测试Code如下:
--准备测试表
DROP TABLE TB1
GO
CREATE TABLE TB1
(
C1 VARCHAR(200),
C2 NVARCHAR(200)
)
GO
--插入测试数据
INSERT INTO TB1(C1,C2)
SELECT N'm²',N'm²'
UNION
SELECT N'®',N'®'
--查询
SELECT C1,
CAST(C1 AS NVARCHAR(200)) AS C1_N,
C2,
CAST(C2 AS VARCHAR(200)) AS C2_V
FROM TB1
可以明显地看到上标在varchar类型下转换成普通数字2,而版权符号在varchar类型下直接就乱码。
对于这些特殊字符,可能不会被使用到,比如用户姓名字段,那么是不是就可以使用varchar类型了呢?
当然不是,能避开特殊字符,还得考虑“有文化的父母”给子女来点生僻字以展示有文化!!!比如五代十国中南汉的创建者刘䶮就自认为很牛叉,于是自己创了一个“䶮”字,取意为飞龙在天,如此牛叉的意义就不招varchar的“喜欢”,测试code如下:测试结果如下:
可以明显地看到上标在varchar类型下转换成普通数字2,而版权符号在varchar类型下直接就乱码。
对于这些特殊字符,可能不会被使用到,比如用户姓名字段,那么是不是就可以使用varchar类型了呢?
当然不是,能避开特殊字符,还得考虑“有文化的父母”给子女来点生僻字以展示有文化!!!比如五代十国中南汉的创建者刘䶮就自认为很牛叉,于是自己创了一个“䶮”字,取意为飞龙在天,如此牛叉的意义就不招varchar的“喜欢”,测试code如下:
INSERT INTO TB1(C1,C2)
SELECT N'刘䶮',N'刘䶮'SELECT C1,
CAST(C1 AS NVARCHAR(200)) AS C1_N,
C2,
CAST(C2 AS VARCHAR(200)) AS C2_V
FROM TB1
显示结果如下:
“䶮”字只能在NVARCHAR模式下才能完好地显示哈!
建议使用NVARCHAR来存放非英文字符数据理由:
理由1:VARCHAR类型存放特殊字符或生僻字时存在乱码或字符被转变的问题
理由2:对于中文字符,使用VARCHAR和NVARCHAR消耗同样的空间,对于英文字符,使用VARCHAR比NVARCHAR节省一倍的空间,但随着磁盘成本越来越低,其提升的性能和节省的成本有限。(例外:如果数据中存在大量英文字符和少量非英文字符,则可以考虑VARCHAR类型)
理由3:对于需要国际化的企业,后期将VARCHAR升级为NVARCHAR的成本太高或难以实现
理由4:使用VARCHAR存放非英文字符时,容易生成错误的预估值,尤其在执行LIKE这类前缀匹配的预估时。显示结果如下:
“䶮”字只能在NVARCHAR模式下才能完好地显示哈!
建议使用NVARCHAR来存放非英文字符数据理由:
理由1:VARCHAR类型存放特殊字符或生僻字时存在乱码或字符被转变的问题
理由2:对于中文字符,使用VARCHAR和NVARCHAR消耗同样的空间,对于英文字符,使用VARCHAR比NVARCHAR节省一倍的空间,但随着磁盘成本越来越低,其提升的性能和节省的成本有限。(例外:如果数据中存在大量英文字符和少量非英文字符,则可以考虑VARCHAR类型)
理由3:对于需要国际化的企业,后期将VARCHAR升级为NVARCHAR的成本太高或难以实现
理由4:使用VARCHAR存放非英文字符时,容易生成错误的预估值,尤其在执行LIKE这类前缀匹配的预估时。
SQLServer特殊字符/生僻字与varchar相关推荐
- sqlserver中文生僻字乱码问题
sqlserver中文生僻字乱码问题解决 场景:前端输入生僻字,e.g. 㙍.㮾,存入到数据库为乱码(㙍/-). 解决:修改会存生僻字的字段(一般地址字段)的数据类型为nvarchar,在插入或更新s ...
- Delphi6及SqlServer对于生僻字䶮的支持测试
1.二进制SqlServer正像现场反馈的这样,后台字段只能以nvarhcar类型来保存,并且插入和更新的时候需要在字段前加'N',例: update SF_BRXXK set hzxm=N'䶮' 可 ...
- sqlserver varchar 类型存储生僻字,会变成问号,而nvarchar类型不会 是什么原理? (㙍、㮾,䶮)
在 SQL Server 中,varchar 类型和 nvarchar 类型都用于存储可变长度的字符数据.它们之间的主要区别在于字符编码的方式. varchar 类型使用的是单字节编码(如 ASCII ...
- Sqlserver 生僻字
Sqlserver 生僻字 插入出现生僻字: 加上 N就正确了: 查询方法: 既要显示正确又要正确查询解决办法 select * from db_owner.systemMember where me ...
- java mysql 生僻字_mysql/Java服务端对emoji或者生僻字的支持
最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题.困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移.在此特别分析和整理,方便更多人. ...
- mysql触发器 生僻字_MySQL生僻字插入失败的处理方法(Incorrect string value)
最近,业务方反馈有个别用户信息插入失败,报错提示类似"Incorrect string value:"\xF0\xA5 ..... " 看这个提示应该是字符集不支持某个生 ...
- mysql不识别生僻字_MySQL生僻字插入失败怎么办
业务方反馈有个别用户信息插入失败,报错提示类似"Incorrect string value:"\xF0\xA5 ..... " 看这个提示应该是字符集不支持某个生僻字造 ...
- java生僻字_Android上显示生僻字的方法
安卓5.0+是可以显示所有(8万多个)Unicode汉字的,本文介绍显示生僻汉字的方法,这个方法也适用于其它特殊字符. Unicode值在0xFFFF以下的(2万多个简体.繁体)汉字早已被广泛支持,所 ...
- [微软拼音小技巧] 如何用Unicode输入生僻字
大家好,我是钱力强,微软拼音输入法的软件工程师.微软拼音有很多很好的功能,长期不为广大用户所了解.在有些时候,这些功能可能真的能够解决你的难题. 日前有新闻报道"山东两百村民因电脑不认生僻字 ...
最新文章
- 53个Python库,你必须要试试
- 新建QQ群-欢迎加入
- BERT源码分析(PART III)
- 求两条轨迹间的hausdorff距离_自动控制原理 | 根轨迹法
- python文件封装成jar_【Python】Python文件打包为可执行文件
- Nmap系列C------OSI二层扫描
- java 列表对话框
- HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车
- jsp页面中使用javascript获取后台放在request或session中的值
- verifycode.php,php验证码|php图片验证码|php image.verifyCode.class.php
- 戴尔计算机恢复,DELL计算机恢复镜像问题(已解决)
- 数学分析教程(科大)——6.1笔记+习题
- WMS(仓库管理系统)
- Docker中安装并配置redis
- 一小时速成!扁平化名片设计PS教程
- 专杀工具编写思路(转)
- 自适应螺旋飞行麻雀搜索算法
- (超级详细)状态路由协议实验-OSPF(最短路径优先)实验
- word另存为pdf时带书签
- 【uniapp】根据出生日期计算年龄