因未指定NVARCHAR类型的长度而导致的问题

1 问题重现

(1)准备测试数据

新建数据表tb_Student并插入下图所示的测试数据。

图1 数据表tb_Student的数据

(2)新建查询

DECLARE @teacher_name NVARCHAR
SET @teacher_name = '李四'
SELECT * FROM tb_Student AS s WHERE s.teacher_name = @teacher_name

(3)执行查询

什么也没有得到,但是数据表中明明存在满足条件的数据啊,问题出在哪里?

2 问题分析与解决

通过查阅资料,了解到:不指定NVARCHAR类型的长度时,会使用默认长度,默认长度是1,所以本例中的变量@teacher_name被赋值‘李四‘时,为其分配的空间只够保存字符‘李‘,而多出来的字符‘四‘将被舍去。所以,这里的查询便变成了:查询学生表中老师姓名为‘李‘的所有学生信息。很显然,满足该条件的记录不存在。修正这个问题很简单,只需为NVARCHAR类型的@teacher_name变量指定一个长度,这里为其分配十个字节的存储空间,修正后再次执行查询,正确得到下图所示结果。

图2 查询执行结果

3 总结

本文所讨论的问题真的是太“微不足道”了,但就是这样一些“微不足道”的小问题往往使我们绞尽脑汁。

为了更好的规避这些本不应该出现的“小问题”,最好的方法就是:强化对基础知识的学习,并在工作中不断的实践与总结,仅此而已。

时间: 2024-08-05 15:20:47

因未指定NVARCHAR类型的长度而导致的问题的相关文章

关于数据库中varchar/nvarchar类型数据的获取注意事项

当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的占位符. 比如: MSSQL中某一表的结构如下:   表中的数据: 当从表中获取某一个用户名(userName)或密码(userPwd)时,如果取出的数据作为条件进行判断是,需注意获取处的数据最好进行Trim()处理,去除数据两边的空格占位符 比如: 没有对数据进行Trim()处理前,从数据库中获取的数据因为原本的数据长度不够而导致空格占位符 对数据进行Trim()

修改MySQL中字段的类型和长度

MySQL修改字段类型的命令是: mysql> alter table 表名 modify column 字段名 类型; 假设在MySQL中有一个表为:address,有一个字段为city 初始情况下为varchar(30),那么修改类型为char可以在MySQL控制台输入: alter table address modify column city char(30); 注意修改类型应该谨慎,因为类型之间数据需要转换,可能会导致数据出错或者丢失 如果要将varchar(30)长度进行扩展可以使

Oracle CHAR,VARCHAR,VARCHAR2,nvarchar类型的区别与使用(转载)

一 varchar,varchar2,nvarchar,nvarchar2 四个类型都属于变长字符类型, varchar和varchar2的区别在与后者把所有字符都占两字节,前者只对汉字和全角等字符占两字节,都是非 Unicode 字符数据,可以定义的最大长度为4000字节. nvarchar和nvarchar2的区别和上面一样,   与上面区别在于是根据Unicode   标准所进行的定义的类型(长度定义的是字符数,而不是字节数),通常用于支持多国语言类似系统的定义,可以定义的最大长度为400

mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么

详解mysql int类型的长度值 mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个长度1并不代表允许存储的宽度,但却没有一个合理的解释. 或者说对这个长度也没有真正的研究过到底代表什么, 平时都用int(11), 也不知道为什么要11位. 所以我在网上查阅了一些资料, 也仔细的看了mysql手册关于int data type的说法. 以下是每个整数类型的存储和范围

Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法

条件中带的是中文无法查询出,因为字段sender_su_name是nvarchar类型的,需要前面接个N SELECT * FROM [test].[dbo].[Ship_User_Email]  WHERE [sender_su_name]=N'奖励' 为什么要带N如下解释: 使用 Unicode 数据 Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案.所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符.这保证了同一个位模

Oracle修改字段类型和长度

Oracle修改字段名 alter table 表名 rename column 旧字段名 to 新字段名 Oracle修改字段类型和长度 alter table 表名 modify 字段名 数据类型 如果是修改数据类型比如由varchar2修改为int且字段内有值,会报如下错误 解决方法参考:http://blog.csdn.net/itmyhome1990/article/details/8681206 转载请注明出处:http://blog.csdn.net/itmyhome1990/ar

Oracle/SQL 修改字段类型和长度

标准SQL修改字段类型和长度语句:ALTER TABLE tableName modify column columnName 类型;例如Mysql的修改字段类型语句:alter table test modify column name varchar(255); Oracle修改字段类型和长度语句:ALTER TABLE tableName modify(columnName 类型);例如alter table test modify(name varchar(255)); Oracle/S

C里面的类型字节长度和范围

32位平台 char 1个字节8位 short 2个字节16位 int 4个字节32位 long 4个字节 long long 8个字节 指针 4个字节 64位平台 char 1个字节 short 2个字节 int 4个字节 long 8个字节 long long 8个字节 指针 8个字节 范围 char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -21474

SQLServer2005,2000获取表结构:字段名、类型、长度、主键、非空、注释

SQLServer 2005 SELECT d.name N'TableName', d.xtype N'TableType', a.colorder N'ColumnIndex', a.name N'ColumnName', (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '0' end) N'IdnetityFG', (case when (SELECT count(*) FROM sysobjects