首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果某些数据小于4000个字符,nvarchar(max)将如何在数据库中存储数据?

如果某些数据小于4000个字符,nvarchar(max)将如何在数据库中存储数据?
EN

Database Administration用户
提问于 2011-12-30 10:46:03
回答 2查看 3.6K关注 0票数 8

我必须开发一个CMS,将支持两种语言的英语,阿拉伯语。这个CMS将是一种文章发布网站。在设计和分析时,我发现有些文章的长度超过8000字。我的表中有一些列

代码语言:javascript
运行
复制
PageID int,
PageTitleEnglish nvarchar(200),
PageTitleArabic nvarchar(200),
PageDescEnglish nvarchar(500),
PageDescArabic nvarchar(500),
PageBodyEnglish nvarchar(max)
PageBodyArabic nvarchar(max)

如果我将PageBody保持为nvarchar( 4000 ),那么我限制在4000个字符,如果我必须存储阿拉伯文本,那么我需要16000字节(因为阿拉伯语是Unicode,比ASCII占用3倍的空间)。

因此,我只剩下将PageBody定义为nVarchar(max)的选项,从性能的角度来看,这会有它的缺点。我的实际问题是,如果PageBody列中的某些数据小于4000个字符,那么它会不会是characters,而不是内联列或单独数据库中的数据。

我也在谷歌上寻找过这个问题,但没有找到任何相关的答案,也没有找到在这种情况下如何提高性能的方法。

欢迎对这种设计多语种CMS的最佳实践提出建议。

我只需要支持两种语言阿拉伯语和英语

EN

回答 2

Database Administration用户

回答已采纳

发布于 2011-12-30 10:50:51

如果nvarchar(max)值足够短,它将被存储为"排在“。

默认行为可以使用服务提供商_表选项“大值类型出行”选项进行修改。我不会费心的。DB引擎将有效地管理这一点。

至于设计,有几种基于模型的方法:

  • 你总是同时拥有英语和阿拉伯语吗?
  • 一个可以随意选择吗?如果是的话,是否总是强制性的呢?
  • 你希望以后会有更多的语言吗?

1.单独的表

也就是说,您可以将不同的语言拆分成不同的表。

这允许表级排序规则而不是列级排序规则。

它允许每页允许更多的行,并允许更多的机会在行LOB存储。

PageParent

  • PageID int,
  • PageOtherInfo...

PageEnglish (注: varchar在这里可能没问题)

  • PageID int,
  • PageTitleEnglish varchar(200),
  • PageDescEnglish varchar(500),
  • PageBodyEnglish varchar(最大)

PageArabic

  • PageID int,
  • PageTitleArabic nvarchar(200),
  • PageDescArabic nvarchar(500),
  • PageBodyArabic nvarchar(最大)

2.分隔行

或者有一个languageID列来支持几种语言。

这有一个缺点,即所有语言的排序规则都是固定的,这意味着排序/过滤很差。

PageParent

  • PageID int,
  • PageOtherInfo..

页面

  • PageID int,
  • LanguageCode,
  • PageTitle nvarchar(200),
  • PageDesc nvarchar(500),
  • PageBody nvarchar(最大)
票数 10
EN

Database Administration用户

发布于 2011-12-30 11:05:06

  • 的固定页大小为8KB。
  • 一个行永远不会在几个页面上被分割,但是几行可以共享一个页面。
  • 不过,nvarchar(max)和其他BLOB数据可以存储在行/页之外。

这意味着要把所有的东西都装进一行,所有尺寸的总和必须小于8K。如果没有,Server将将BLOB存储在行/页之外。

数据量大到真的会导致性能问题吗?

作为另一种选择,您也许可以更改数据库结构,以便为英文页和阿拉伯页分隔行,并包含一个语言代码列。这样就不必将英文文本和阿拉伯文本放在同一行中,这在获取数据时也是有意义的,因为您可能不需要同时获取英语和阿拉伯语。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/9953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档