当前位置:首页 » 编程语言 » sql改字符串长度
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql改字符串长度

发布时间: 2022-05-05 07:58:06

① 怎样在数据库中用sql语句约束字符类型的字段长度至少为六

1、首先打开软件,进入界面。

② 如何调整oracle中的sql语句输入的最大长度

Oracle SQL 语句in长度不得超过1000
IN 子句中的LIST个数最长为1000,超过该数目将报错,这里可转用一个临时表来解决;CREATE TRIGGER语句文本的字符长度不能超过32KB(触发器中不能使用LONG, LONG RAW 类型;触发器内可以参照LOB 类型列的列值,但不能通过 :NEW 修改LOB列中的数据;)顺便说一下,触发器中的PARENT关键字,只在嵌套表触发器中有效,11G以前,DBMS_SQL对输入的SQL长度不能超过32K,原因是输入参数只能是VARCHAR2类型,11G后,可以用CLOB作为输入参数,则取消了这个限制一个PL/SQL的包、过程、函数、触发器的大小,在UNIX上最大是64K,而WINDOWS则是32K大小(32K这个应该不准,看下面的测试)SQL语句可以有多长?(网友说)ORACLE文档说是64K,实际受一些工具的限制会较这个值低,但网友测试发现可以很长,甚至超过1M(我测试过 170K的都没问题)。具体多长,10G也未说明,只是与很多环境有关:数据库配置,磁盘空间,内存多少。。。
PL/SQL中,表达式/SQL本身的长度是可以达到比较长的长度(50K)左右,如:v_str:=:new.f1||:ndw.f2。。。 ; select :new.f1||:new.f2。。。 into v_str from al; 另外发现,如果这样写:v_str := ‘a’||’b’||。。。则允许的表达式长度将大大的减少。如果表达式/SQL过长,超过了一个ORACLE包/过程允许的最大程序长度,则在编译时报 pls-123:program too large错误,这是pl/sql编译器本身的限制造成的,即表达式/SQL的长度在PL/SQL中受限于包/过程的最大大小=================================================Oracle Sql语句长度限制问题及解决
最近在写Sql语句时,碰到两个问题:
1)ORA-01795: maximum number of expressions in a list is 1000起因:写出了这样的sql语句:SELECT PALLET_ID,BOX_ID,STATUS FROM SD_CURRENT_BOX WHERE PALLET_ID IN('"+pallets+"');其中的pallets是有很多个pallet_id组合成的字符串。
分析:很显然,根据错误提示可以知道:in 中items的限制 1000个。
解决:用子查询来代替pallets长字串。
2)ORA-01704: string literal too long
起因:写出了这样的Sql语句:UPDATE PDM_MEMBERLIST SET MEMBERS='<Project> ... 此处略去n多串 <ProjectID>'.
分析:数据库设计MEMBERS字段为xmltype格式,数据存储时候,是以字符串的形式存储。这样在xml数据量大的时候,造成sql语句过长,尝过2k的限制。
解决:参数化sql语句。
==================================================参数化sql语句----防止sql注入攻击(下)
上一篇写的sql注入的基本原理,本来要接着写这篇的,但是由于时间的原因一直没有写成,今天是五一假期,总算是能抽空写写了。
作为一个程序员,防范sql注入的第一线是由我们来守护的,只要我们在程序中留少许的漏洞,就会给程序增强安全特性。所以我们要做的是要写安全的程序,防止sql注入在程序体现在不要拼接sql字符串,一定要参数化sql或者写存储过程,这里就说说简单的参数化sql吧。
例子中用c#和Oracle实现,Java中或者其他数据库中的实现也是类似的。
using System.Data.OracleClient;//引入oracle操作包//定义DML语句
string strSQL = @"select user.name from user where user.name =:userName";//上句中的:userName就是sql语句中参数的占位符,也就是说在数据库服务器中执行这条sql语句的时候这个占位符要被其他东西替换掉,到底用什么东西替换呢,接着往下看OracleParameter[] param = {
new OracleParameter(":userName",txtName);}//这里定义一个参数的数组,里面可以写入多个sql参数,咱们的这里只有一个,所以就写入一个参数,这里讲占位符和他的替换也就是参数值对应起来了,txtName就是占位符的替换值,他是用户界面中用户输入的值,就是他可能含有注入攻击的字符,这下数据库服务器知道用什么东西替换占位符了。
定义好sql语句和参数后就是执行了,执行的时候需要同时将sql语句和参数传入,这样用户输入的带有非法字符的字符串在数据库会当作参数处理,而不会当作sql语句和数据库自己的字符混乱,防止了注入攻击。
OracleCommandcmd = new OracleCommand();
cmd.CommandText= strSQL;//定义oracle命令的文本内容for(oracleParameter p in param)//将参数传入{
cmd.Parameters.Add(p);
}
cmd.ExecuteNonQuery();//执行命令
上面基本上是一个完整的参数化sql,不同的数据库服务器sql语句中参数的占位符不同,上面用的是oracle,参数占位符是冒号(:)加名字,在sqlserver中是用@符号加名字作为占位符,而在MySQL中用问号(?)加名字来作为参数占位符,不同的数据库中参数的表示符号不一样,这个需要注意。
防止sql注入攻击(上)
Sql注入是一种入门极低破坏极大的攻击方式。如果sql是用字符串拼接出来的话,那么肯定会被注入攻击,前段时间还传出了某国外大型社交网站被SQL注入攻击。
Sql注入攻击的方式,来这里看的同志们应该很清楚了,就是在拼接字符串的时候,如果输入的是带单引号的,那么输入laf'or 1='1'--这样就会逃避条件检查,后面要是再跟一些shutdown,delete之类的条件,那么损失基本算是毁灭性的了。前几天单位开发的过程中我发现几乎大家都不重视安全,一个写代码的人不注意安全只注意实现那么写出来的代码在攻击者眼前基本就是一个没有穿衣服的美女。
下面是我一个开发人员的一些经验,主要用来防止sql注入。
1、首先对运行sql的用户赋予最小权限,这个理论也是安全领域的最小特权理论,运行一个程序一定要用最小特权运行,所以不要给用户服务DBA的权限,限制要权限之后可以防止一些毁灭性的攻击,即使攻入了也不会shutdown修改表之类的。
2、一定不要使用字符串拼接的方式构造sql,必须使用参数化sql,存储过程可以看作是参数sql,简单的就直接构造参数化sql,复杂的就写存储过程,不过存储过程中一定不要用字符串,我看有人在存储过程用字符串,这样还是不能避免被攻击,并且在调试的时候非常麻烦。
3、严把输入关,系统肯定是用来交互的,所有用户输入的这一关一定要把好,可以利用各种方式来检验用户的输入,让输入都是合法的;可以设敏感字符不让用户输入,这个虽然不是很友好,不过对与安全有保证。在验证的是可以用正则表达式或者程序验证,不管用什么方式只要把敏感字符和可疑字符拒之门外那么就无法攻击了,不过限制输入还是有缺陷,在安全理论方面,只能确定合法,不能确定不合法,比如你在界面限制了合法的,那么剩余的都是不合法的,这时候输入的肯定全部是合法的,如果你限制的是非法的,可是你能确保你限制的全是非法的?如果某一天发现一个非法的不再你限制之内那么你就会被攻击。
4、做好自己的检验和测试工作,自己可以进行sql注入攻击,利用工具检验。
5、一定要养成具有安全意识的程序员,时刻想着安全。
这几条之中最重要的是1和2,权限限制一定要注意,不然会死的很惨的,第二就是程序员的习惯了,一定要用参数化sql和数据库交互。

③ sql 字符串长度设置一定要跟数据一样吗多了可以不

CHAR(10)是固定长度,如果你插入123,他会在123后面跟7个空格,如果多余10个,他会截取前10个
VARCHAR(10)的可变长度,初始化为10个大小,但是你可以随便插入,他会自动增加

④ 关于SQL中字符长度的设置

看你字段有多少个字,取最大的就行了
有汉字用nvarchar,一个汉字算1个字
全英文数字半角符号用varchar,一个字母算一个字
如果非要用varchar装汉字,一个汉字算2个字

⑤ SQL如何替换指定字符长度后面的内容

楼主好,使用sql中的replace函数,即可达到要求。比如现在某一列a中有个字符串:aabbcdeef,假设要把字符串当中的e替换成g,则:
select
replace(a,'e','g')
from
table1

⑥ sql serve中使字符串长度为5位数

sql 里面只能设定字符串长度的最大长度,不能设定指定长度,要指定字符串的长度的话,就在程序里面做判断提示

⑦ SQL中统计字符串长度的函数是什么

SQL中统计字符串长度的函数是:函数len(string)。

比如:

select len(&#39;abc&#39;)输出3

select len(&#39;abcde&#39;)输出5

字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。
常用的字符串函数有:

  1. ASCII():返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。

  2. CHAR():将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。

  3. LOWER()和UPPER():LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。

  4. STR():把数值型数据转换为字符型数据。

    STR (<float_expression>[,length[, <decimal>]])

    length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。

    当length 或者decimal 为负值时,返回NULL;

    当length 小于小数点左边(包括符号位)的位数时,返回length 个*;

    先服从length ,再取decimal ;

    当返回的字符串位数小于length ,左边补足空格。

  5. LTRIM() 把字符串头部的空格去掉。

  6. RTRIM() 把字符串尾部的空格去掉。

  7. left():LEFT (<character_expression>, <integer_expression>)返回character_expression 左起 integer_expression 个字符。

  8. RIGHT():RIGHT (<character_expression>, <integer_expression>)返回character_expression 右起 integer_expression 个字符。

  9. SUBSTRING():SUBSTRING (<expression>, <starting_ position>, length)返回从字符串左边第starting_ position 个字符起length个字符的部分。

  10. CHARINDEX():返回字符串中某个指定的子串出现的开始位置。CHARINDEX (<’substring_expression’>, <expression>)

    其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。

    此函数不能用于TEXT 和IMAGE 数据类型。

  11. PATINDEX():返回字符串中某个指定的子串出现的开始位置。PATINDEX (<’%substring _expression%’>, <column_ name>)其中子串表达式前后必须有百分号“%”否则返回值为0。与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。

  12. QUOTENAME():返回被特定字符括起来的字符串。QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。

  13. REPLICATE():返回一个重复character_expression 指定次数的字符串。REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。

  14. REVERSE():将指定的字符串的字符排列顺序颠倒。REVERSE (<character_expression>) 其中character_expression 可以是字符串、常数或一个列的值。

  15. REPLACE():返回被替换了指定子串的字符串。REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用string_expression3 替换在string_expression1 中的子串string_expression2。

  16. SPACE():返回一个有指定长度的空白字符串。SPACE (<integer_expression>) 如果integer_expression 值为负值,则返回NULL 。

  17. STUFF():用另一子串替换字符串指定位置、长度的子串。

  18. STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>):如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。

拓展资料:

SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。

⑧ 怎么在SQL 2000里修改一个表里的列的字符长度求命令。

update 是对表或视图中的现有数据进行更改的。
alter 通过修改、添加或删除列和约束来修改表、视图、存储过程、触发器等定义

你如果要修改db_qwer表中cd字段的长度修改到150,则需要用:
ALTER TABLE db_qwer ALTER COLUMN cd VARCHAR(150)

如果要修改db_qwer表中cd字段中的数据,则需要用:
update db_qwer set cd = '你所需要修改的内容' where [满足你的修改条件]

从你描述上看你应该是用第一种方法吧。

⑨ 怎么修改sql表中列的数据长度

是变长字符型么?
修改长度有个要求,就是这个字段上不能有约束。主键或者外键,都不行。
SQLSERVER修改语法:
alter
table
表名
alter
column
字段名
varchar(新长度)
ORACLE
alter
table
表名
modify
字段名
varchar2(新长度)

⑩ SQL语句如何修改CHAR(xx)中的XX字符数

alter table tablename alter column colname char(你想要的长度)