(SqlServe)关于字符串长度被截断的问题
1. 问题描述
在同步数据时常常会发现一个错误:将截断字符串或二进制数据。
2. 问题原因
这个问题出现的原因是:要插入的数值字段的长度超出了数据库中字段的长度。比如:插入的字符串字节长度是40,数据库中字段长度设置为了varchar(36)就会报此错误。
3.问题扩展
a. 如何计算字符串长度和字节长度,既:datalength和len区别。
len:返回字符串的长度
datalength:返回字符串的字节长度
select len(convert(varchar(50),N'狮lion')) --5 N''表示Unicode格式字符串
select datalength(convert(varchar(50),N'狮lion')) --6
select len(N'狮lion') --5
select datalength(N'狮lion') --10
接下来我们分析一下为何会这样.
len返回字符串的字符长度,既:一个汉字'狮'+4个字母'lion'=5个字符。每个汉字和字母都占一个字符长度。
datalength返回字符串的字节长度。对于字节长度,需要理解:一般编码模式下,汉字和英文字母所占字节是不一样的。一般来说,汉字占2个字节,英文字符占一个字节。而对于Unicode编码,汉字和英文字母都占2个字节。
讲解一下varchar和nvarchar的区别,varchar是普通编码的字符串,nvarchar是Unicode编码的字符串,对应例子,就是对汉字'狮'来说,varchar格式的字符串长度为1,nvarchar格式的字符串长度为2。
len(convert(varchar(50),N'狮lion')) --返回字符长度,'狮lion',一共5个字符,varchar格式字符
len(N'狮lion') --返回字符长度,'狮lion',一共5个字符,nvarchar格式字符
datalength(convert(varchar(50),N'狮lion')) --返回字节长度,varchar格式字符'狮lion','狮'占2个字节,
--'lion'中每个字母占用一个字节,共占用4个字节
datalength(N'狮lion') --返回字节长度,Unicode格式字符,汉字'狮'占2个字节,
--'lion'中每个字母占用2个字节,共占用8个字节
文章引用:https://blog.csdn.net/oncealong/article/details/37573927
b. 如何查看数据库的编码格式。
--查看sqlserver数据库的编码格式
SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage');
查询结果:
936 简体中文GBK
950 繁体中文BIG5
437 美国/加拿大英语
932 日文
949 韩文
866 俄文
65001 unicode UFT-8
c. varchar和char和nvarchar三者的区别
- char是定长(固定长度),效率高于varchar;也就是当你输入的字符小于你指定的数目时,例如:char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。
- varchar[n]是变长且非unicode字符数据类型,n的取值在1到8000之间,该类型英文字符占一个字节,中文字符占两个字节。优点:更加合理利用空间,不会造成过多的浪费。
- nvarchar[n]是变长且unicode字符数据类型,n的取值在1到4000之间,该类型字符无论中英文都占取两个字节
其中varchar和nvarchar两字段分别有字段值:你好hello
那么varchar字段占2×2+5=9个字节的存储空间,而nvarchar字段占7×2=14个字节的存储空间。
如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar
文章引用:https://www.cnblogs.com/flqcchblog/p/4560781.html
(SqlServe)关于字符串长度被截断的问题的更多相关文章
- js获取字符串的实际长度并截断实际长度
在项目中有这样一个需求,就是一个很长的字符串,需要截断成几组字符串,而这几组字符串里既包含汉字,又包含字母,下面提供了几种方法 1,获取字符串的长度 function getstrlength(str ...
- 字符串长度函数strlen()
如下是我的测试文件: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ...
- ECMAScript6补全字符串长度方法padStart()和padEnd()
一.padStart() 1.定义 padStart()方法用另一个字符串(默认为空格)重复填充到对象字符串到指定长度,填充从对象字符串左侧开始,返回新的字符串. 2.语法 str.padStart( ...
- [No0000A4]DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度
1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set a ...
- iOS小知识:计算字符串长度(如果有表情,表情的长度为1)
在做项目的时候,textField能够输入表情,但是iOS的表情是占两个字符的,再计算字符串长度的时候就和想象的不一样了,所以用了次方法会将表情的长度转成1,最后得到的字符串的长度就是能看到的实际的长 ...
- JS判断字符串长度(中文长度为2,英文长度为1)
目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var len = 0; for (var i=0; ...
- JS判断字符串长度的5个方法
这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.pr ...
- [转载] python 计算字符串长度
本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...
- php 计算字符串长度
在项目的开发中,常常遇到要计算一个字符串的长度(中英文结合),由于产品要求不同,每个中文的长度要求也不一样. 解决utf-8编码下的字符串长度(可自定义每个中英文算几个字节) /** * 计算字符串长 ...
随机推荐
- 函数进阶· 第3篇《常用内置函数filter()、map()、zip(),怎么用的呢?》
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 由于微信公众号推送改为了信息流的形式,防止走丢,请给加个星标 ,你就可以第一时间接收到本公众号的推送! ...
- Python序列(十一)集合
集合试无序可变列表,使用一对大括号界定,元素不可重复,同一个集合中每一个元素的都是唯一的. 集合只能包含数字.字符串.元祖等不可变类型(或者说可哈希)的数据,而不能包含列表.字典.集合等可变类型额数据 ...
- 读取平台管理员xlsx文件
package com.cn.peitest.excel; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...
- Git 常用命令 【13个命令包含git 90%的操作】
- Windows10搭建本地ftp服务器
首先要有一个win10专业版的操作系统,连接上互联网... 一.首先打开控制面板选择程序,再选择"启用或关闭windows功能" 二.在"Windows功能"中 ...
- sprignAOP那些术语
那些AOP术语 初看这么多术语,一下子都不好接受,慢慢来,很快就会搞懂.通知.增强处理(Advice) 就是你想要的功能,也就是上说的安全.事物.日志等.你给先定义好,然后再想用的地方用一下.包含As ...
- 自动化运维工具-Ansible之1-基础
自动化运维工具-Ansible之1-基础 目录 自动化运维工具-Ansible之1-基础 Ansible 基本概述 定义 特点 架构 工作原理 任务执行模式 命令执行过程 Ansible 安装 Ans ...
- Java异常体系概述
Java的异常体系结构 Java异常体系的根类是 Throwable, 所以当写在java代码中写throw抛出异常时,后面跟的对象必然是Throwable或其子类的对象. 其中Exception异常 ...
- [学习笔记]尝试go-micro开发微服务<第一波>
平时项目都是基于c++,lua,node, 现在打算开始自学开发微服务; 也顺带磨砺下go和docker 前期准备 1. 有golang编程基础 本系列文章是基于有golang编程基础,有过实际开 ...
- Alpha冲刺——代码规范与计划
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...