字符串的 SQL 数据类型

标签 sql data-structures

我有类似的数据结构 -

class House
{
    int id;
    string street;
    string city;
    string review;
    string status;
}
  1. streetcity 是常规字符串,应始终少于 32 个字符。我认为他们应该有一个 nchar(32) 的 SQL 数据类型?或者它们应该是 varchar?

  2. review 是用户可以输入的可选字符串。即使他们确实给出了,也可能有很大差异,从 4-5 个单词到 2000 多个字符。那么我应该使用什么数据类型来存储它?

  3. 状态是一个标志,其值为"new"、“旧”、“未启动”。无论它具有什么值,都将显示在桌面应用程序的数据网格中。我应该将此字段存储为字符串,还是具有不同位作为标志的字节?

最佳答案

如果您正在设计美国表,我建议使用 VARCHAR(32) 作为地址和城市。如果您正在设计一个国际字段,请增大两个字段并切换为 NVARCHAR(72)。 NVARCHAR存储占用空间较大,但允许存储非ASCII字符...

CHAR(32) 保留 32 个字节的数据,无论该字段包含 1 个字符还是 32 个字符。此外,某些客户端编程语言不会自动修剪多余的空格(这是正确的,但可能不是预期的)。 NCHAR(32) 保留 64 个字节,因为每个字符都用 2 个字节表示

对于审查,我同意 lanks 的观点,TEXTVARCHAR(max) -(MS SQL 特定) 是最好的。评论长度可以超过2000字吗?如果 2000 是绝对限制,那么我会选择 VARCHAR(2000)。如果您可以进行任意长度的审核,我只会使用文本字段。请记住,如果用户输入的评论超过 2000 个字符,如果您尝试插入它,数据库将引发错误,因此您的应用程序需要限制字符数或在错误发生时进行处理。

状态应该是数据库允许的最小整数。您可以创建第二个表来提供代码的文本描述。

关于字符串的 SQL 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679516/

相关文章:

arrays - 获取使用O(klogk)中的稀疏表排序的范围内的k个最小元素

c - 将 32 位值分配给无符号 uint8_t 数组

mysql - 如果我的应用程序在保存数据之前已经验证了数据,为什么我需要对列使用 UNIQUE 约束?

mysql - 创建一个 Join,为任何可能的重复项留下一行

sql - 在 PostgreSQL IF/THEN 语句中使用 DELETE FROM...RETURNING

c++ - 用于排序/检索字符串的数据结构

algorithm - 在哈希树中,非叶子节点是直接数据的哈希,还是子哈希的哈希?

mysql - 通过用户与城市关系查找国家/地区,其中用户与一个国家/地区的所有城市相关

sql - 如何创建慢速 SQL 查询?

algorithm - 循环异或链表?