【问题标题】:Storing a lot of text in one value whose column is varchar (Database)将大量文本存储在一个值为 varchar 的值中(数据库)
【发布时间】:2012-04-26 06:03:48
【问题描述】:

我在前端应用程序中有一个非常简单的文本框(例如 php,尽管语言无关紧要),并且正在插入到下面定义的数据库中表的描述列中:

表(ID[主键],描述[varchar(255)])

虽然不会经常发生,但有时需要为一个元组插入超过 255 个字符。我可以增加 varchar 的长度,但元组大小受到限制,因此为了安全起见,请将其保持在建议的最大值 255。

我能弄清楚如何做到这一点的唯一方法是拥有 2 个表格并将文本分成 255 个字符块。表定义为:

Table1(ID[主键]........)

Table2(ID,table1ID[表1的外键]描述[varchar(255)])

有没有更好的方法来实现这一点?

编辑:Mysql 版本 5.5.11 不知道有文本数据类型。应该是新的。听起来像是一种应用程序对象,但它是否足够灵活,可以平均存储 150 个字符,并且 10% 的时间可以存储接近 5000 个字符?

【问题讨论】:

  • 你用的是什么版本的 MySQL?
  • 您在寻找 mysql 'text' 数据类型吗?

标签: mysql database


【解决方案1】:

如果使用 MySQL 5.0.3 或更高版本,您只需增加 VARCHAR 的大小即可。根据manual

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 及更高版本中可以指定为 0 到 65,535 之间的值。 MySQL 5.0.3 及更高版本中VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。见Section E.7.4, “Table Column-Count and Row-Size Limits”

要做到这一点,你会这样做:

ALTER TABLE tablename MODIFY description VARCHAR(...) [NOT] NULL;

或者您可以使用TEXT 类型:

ALTER TABLE tablename MODIFY description TEXT [NOT] NULL;

【讨论】:

  • TEXT 与 VARCHAR 65,535 具有相同的限制。
  • @DhruvPathak:是的,但它是 MySQL 上唯一的解决方案(没有拆分数据)
  • "MySQL 5.0.3, and 0 to 65,535" - 整个元组的 0-65,535 个字节因此仍然是一个限制,因为 3 个字节组成一个字符。
  • @D.Rattansingh: 3 个字节组成一个字符??你使用什么字符编码? (至少对于英文字母来说,这将是一种非常罕见的编码,使用 >1 字节/字符)。
  • @D.Rattansingh:文本是什么语言?
猜你喜欢
  • 2011-08-07
  • 2015-03-20
  • 1970-01-01
  • 2021-01-31
  • 2013-08-12
  • 2016-05-23
  • 2020-12-07
  • 2013-07-17
  • 2018-07-26
相关资源
最近更新 更多