【问题标题】:Understanding string sizes / unicode / sqlServer column sizes了解字符串大小/unicode/sqlServer 列大小
【发布时间】:2023-03-20 01:14:02
【问题描述】:

我需要更好地理解用户文本输入到 win 应用程序/asp.net 应用程序,以及存储在 SQLServer 中的数据的适当字段大小。

如果一切都是 ASCII,这似乎很简单(每个字符 1 个字节),但我想我真的不明白当用户将文本放入输入字段时发生了什么。如果输入是Unicode,那么(通常)每个字符有2个字节(?),如果我知道文本输入不能超过5个字符,那么SQL列应该是varchar(10)???我如何知道输入应该是 ANSI 还是 Unicode??

希望这是有道理的。就网页或 win 应用程序如何确定数据的编码方式而言,这是我从未完全理解的事情。

【问题讨论】:

  • 感谢大家的意见。我还找到了this article,它覆盖得非常好。

标签: c# sql-server unicode


【解决方案1】:

创建列时,指定需要存储的字符数,无论它是否为 Unicode。最多需要 5 个字符?然后是VARCHAR(5)NVARCHAR(5),这取决于您是否真的需要 Unicode - 这是一个商业讨论,而不是技术讨论。 2 个字节与列定义无关 - 这与 storage 大小有关。因此,VARCHAR(5) 在完全填充时将占用 5 个字节,NVARCHAR(5) 在完全填充时将占用 10 个字节。定义列时不必担心那些实现细节;但是,您应该在做出选择之前确保需要 Unicode,因为无缘无故将空间要求加倍是浪费。

(忽略关于此类列是否应为CHAR/NCHAR、空字节开销等的参数)

【讨论】:

  • 所以您指定的是字符长度而不是列的存储大小(以字节为单位)。我想这部分是我出错的地方。
  • @rune711 没错,你指定你需要什么,而不是需要多少空间。
【解决方案2】:

SQL 列不是由字节大小设置的,而是由字符大小设置的。 varchar(10) 列将接受 10 个字符。如果您要使用 Unicode 输入,最好设置 nvarchar(10) 这仍然需要 10 个字符,但它将允许所有 Unicode 输入到该列。 ntext text nchar char 也是如此。可以在http://technet.microsoft.com/en-us/library/ms187752.aspx 找到了解 SQL 数据类型的一个很好的 MSDN 页面。至于在 ASP.NET 站点上的文本框中输入什么内容,可以在该文本框中输入任何内容,由您通过代码强制执行您想要输入的内容的规则。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2011-12-24
    • 2010-09-12
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多