数据库
首页 > 数据库> > mysql-增加SQL中列大小的潜在风险是什么?

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

作者:互联网

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

ShortDescription varchar (16) NOT NULL

现在,假设我这样增加尺寸-

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

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

解决方法:

SQL是一种查询语言,而不是特定的数据库实现,因此您的工作量可能会有所不同,但是…

假设“ SQL”表示数据库站点上的MySQL数据库,那么您无需担心存储和性能,如果存储一堆32byte的字符串,您将使用更多的内存和磁盘,但是如果您实际上在其中存储的是16个字节的字符,到VARCHAR(32)的转换很容易.

在MySQL中,VARCHAR没有影响(假设您保持NOT NULL).如果在复合主键中使用该列,则可能会达到大小限制,但是否则,所有varchar条目仅占用1个字节的数据大小.

如果将该列作为其他表中的前键引用,则您也需要将该列也增加到VARCHAR(32),或者如果尝试将32个字符串卡成16个字符,则可能会遇到多余的16个字符被截断的情况字符列.

如果不是MySQL,则跨数据库技术的实现可能会有所不同.但是,VARCHAR实现趋于相似,仅使用存储数据的大小,然后使用恒定量表示数据结束.因此,为什么在许多数据库系统中通常在静态CHAR和动态VARCHAR类型之间选择选项.

正如您在帖子中指出的那样,必须考虑依赖于静态数据大小的外部系统.

Note: please excuse the above fast and free swapping of terms byte
and character, I’m assuming UTF8 or ASCII. If you’re using some
multibyte encoding, substitute approriately.

标签:sqldatatypes,mysql
来源: https://codeday.me/bug/20191122/2056622.html