如何解决需要比 SQL 中允许的更长的列名?
Posted
技术标签:
【中文标题】如何解决需要比 SQL 中允许的更长的列名?【英文标题】:How can I work around my column names needing to be longer than what's allowed in SQL? 【发布时间】:2015-12-20 07:39:04 【问题描述】:我在创建 sql 数据库时遇到了一些情况。我一直在研究一个有大量问题的问卷。我正在使用一个 php 脚本,该脚本会在用户提交调查问卷时自动创建表格,并使用输入名称来命名表格的列。
我想了一个好方法,让我以后在审核提交时可以轻松地跟踪所有内容,就是使用问题作为 html 输入的名称属性,这样当我查询它时,所有内容都在那里,而我没有不得不想知道哪个答案会针对哪个问题,或者来回查看其他内容。
我遇到的问题是 SQL 列的名称长度是有限制的。我不确定这到底有多长,但在缩短输入名称之前我遇到了错误。
所以我需要完成的是对输入使用较短的名称,这样它们对于 sql 列来说不会太长,但是以某种方式将它链接到另一个包含实际名称的表,以便以后可以在我查询时查询它们需要检查提交。有解决办法吗?
【问题讨论】:
创建表,如果它不存在,对吧?另外,我想知道是否有办法将map 字段转换为列名... 这听起来是个坏主意。这是否意味着您将在列名中有空格?比如:“你的车是什么颜色的?” @theB 是正确的。 foxbeefly 我打算做“What_color_is_our_car”来消除空格,但是由于一些问题的长度,我必须找到解决方法,所以它不会起作用。更像是给它起一个像“Ques_01”这样的名字,并让它链接到可以让我查询“你的车是什么颜色?”的东西。而不是“Ques_01,Ques_02,Ques_03”,所以我实际上知道他们在回答什么,而不必同时看其他东西。 这样做的方法不是动态创建表。使用更通用的表并将数据作为实际数据存储在这些表中。如果您向我们提供您的表格示例,我们可以提供一种替代方案,从长远来看更易于维护。 正如其他人所指出的那样...... NAMES 列的使用不是为了存储问题,而是用于列的名称,字段本身在一行中,然后分别有问题和答案.从我读到的内容来看,您似乎对应该如何使用表和列有一些有趣的想法(与使用它们的数据库引擎的意图相反)。您能否举几个例子和信息,例如:最多有多少个答案。对于一个特定的问题,多个问题的答案是否相同,...?我们可以帮助您! 【参考方案1】:不要那样做。解决此问题的方法是将数据作为数据存储在实际列中,而不是动态生成表和列名。
例如,对于用户生成的问卷,您可能具有以下布局:
用户表:
id name
1 john
2 alice
3 fred
问卷表:
id created_by_user_id questionnaire_name
1 1 Animal Questionnaire
2 3 Tree Questionnaire
...
问题表:
id questionnaire_id question
1 1 How many pets do you own?
2 1 Have you ever owned a goldfish?
3 1 Do you like cows?
4 2 How many trees are in your back yard?
5 2 When did you last see a silver birch?
...
答案表
id questionnaire_id question_id user_answered_id answer_text
1 1 1 2 Four
2 1 2 2 No
3 1 3 2 I love cows!
4 1 3 3 I hate cows.
这样,每种事实类型只需要一个表,不必动态生成表或列,并且可以为数据存储任意数量的文本。
【讨论】:
【参考方案2】:通常,最大长度为 128 个字符,但根据您使用的 SQL 版本,也有例外。
【讨论】:
嗯...我有一些超过 128 个字符,所以我仍然需要一个解决方法。 您可以用问题填充表格的第一行。以上是关于如何解决需要比 SQL 中允许的更长的列名?的主要内容,如果未能解决你的问题,请参考以下文章