Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL中增加列大小的潜在风险是什么?_Mysql_Sqldatatypes - Fatal编程技术网

Mysql SQL中增加列大小的潜在风险是什么?

Mysql SQL中增加列大小的潜在风险是什么?,mysql,sqldatatypes,Mysql,Sqldatatypes,假设在名为Ticket的表中有一个名为ShortDescription的列 ShortDescription varchar (16) NOT NULL 现在,假设我像这样增大尺寸- alter table Ticket modify ShortDescription varchar (32) NOT NULL; 这样做的潜在风险是什么?一个潜在的风险是,如果其他一些应用程序根据以前的ShortDescription大小将其任何字段静态设置为16,那么这些应用程序可能无法正确处理较大的数据

假设在名为
Ticket
的表中有一个名为
ShortDescription
的列

ShortDescription varchar (16) NOT NULL
现在,假设我像这样增大尺寸-

alter table Ticket modify ShortDescription varchar (32) NOT NULL;

这样做的潜在风险是什么?一个潜在的风险是,如果其他一些应用程序根据以前的ShortDescription大小将其任何字段静态设置为16,那么这些应用程序可能无法正确处理较大的数据

SQL是一种查询语言,不是特定的DB实现,因此您的里程可能会有所不同,但

假设“SQL”是指数据库站点上的MySQL数据库,那么除了存储一堆32字节的stings之外,您不必担心存储和性能。如果您存储了一堆32字节的stings,您将使用更多的内存和磁盘来处理它们,但是如果您实际存储的是16字节字符,那么将其转换为VARCHAR(32)就是一种清洗

在MySQL中,VARCHAR没有影响(假设您保持NOTNULL)。如果在复合主键中使用该列,则可能会达到大小限制,但其他情况下,所有varchar条目仅采用数据大小+1字节来存储

如果该列在其他一些表中被引用为外键,则还需要将该列扩展为VARCHAR(32),或者如果尝试将32个字符的字符串压缩为16个字符的列,则可能会遇到额外的16个字符被截断的情况

如果不是MySQL,不同DB技术的实现可能会有所不同。然而,VARCHAR实现往往类似,只使用存储数据的大小,然后使用常量表示数据的结束。因此,在许多数据库系统中,通常可以选择静态字符和动态VARCHAR类型

正如您在文章中指出的,必须考虑依赖静态数据大小的外部系统

注意:请原谅上述快速免费交换术语
byte
字符
,我假设是UTF8或ASCII。如果你用的是 多字节编码,适当替换


Ray所说的都适用于SQL Server。您使用的是哪种DBMS?神谕博士后?