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?神谕博士后?