Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANSI标准SQL中是否有用于保存任意大字符串的数据类型?_Sql - Fatal编程技术网

ANSI标准SQL中是否有用于保存任意大字符串的数据类型?

ANSI标准SQL中是否有用于保存任意大字符串的数据类型?,sql,Sql,出于我自己的兴趣,我正在尝试编写一个SQL脚本来构建一个尽可能跨RDBMS的数据库。它只需要创建数据库及其表,并可能用一些数据填充它 一个表包含编码问题,我想知道使用什么数据类型来描述问题。如果我使用的是MySQL,我只会使用文本类型,但我发现这在(ANSI)标准SQL中是不可用的 是否有一种数据类型可用于任意大的文本数据,该数据类型将是标准SQL并与Postgres/MySQL/MSSQL兼容?或者我只需要使用一个非常大的VARCHAR并希望它足够大吗?标准SQL提供了CLOB(字符大对象)类

出于我自己的兴趣,我正在尝试编写一个SQL脚本来构建一个尽可能跨RDBMS的数据库。它只需要创建数据库及其表,并可能用一些数据填充它

一个表包含编码问题,我想知道使用什么数据类型来描述问题。如果我使用的是MySQL,我只会使用文本类型,但我发现这在(ANSI)标准SQL中是不可用的


是否有一种数据类型可用于任意大的文本数据,该数据类型将是标准SQL并与Postgres/MySQL/MSSQL兼容?或者我只需要使用一个非常大的VARCHAR并希望它足够大吗?

标准SQL提供了CLOB(字符大对象)类型,用于保存非常大的文本对象。但是,您可以对这些对象执行的操作是有限的,而且您的DBMS可能不支持这种类型。还有BLOB(二进制大对象)类型


在主要DBMS已经有了自己的非标准设施之后,大型字段被标准化了,因此不同系统之间的一致性不如您所希望的那样高。您需要定义感兴趣的系统,或者接受当您移动到不同的DBMS(或者,很可能是两者)时,您所选择的任何东西都需要更改。在您感兴趣的系统之间可能有一个共同的子集,但这是相对不可能的。

实际上,您需要决定:您想要实现什么:ANSI兼容的数据类型定义还是与尽可能多的DMB兼容的定义。这两件事是不一样的。无论标准中写了什么,或多或少都是DBMS在维护这些标准。所以这就是为什么在实际意义上盲目遵循标准没有什么意义,但是遵循特定DBMS的规范是有用的

我不是说标准都是废话,你不应该看那里。一般来说,所有的DBM都在遵循它们——因此,如果您的方案也遵循它们——这是一个很好的机会,这种方案将得到大多数DBM的支持,但这并不能保证


例如,MySQL具有可变字符串长度(中等长度,高达64Kb),Postgres也具有数据类型。MSSQL也是如此——它还支持数据类型。因此,您可以将其用于所有3个DBMS—但每个DBMS都有自己的数据类型实现(例如,在SQL Server中,它的大小高达2Gb—因此,正如您所看到的,MSSQL 2Gb长度文本成功处理的过大数据将在MySQL中失败)。这意味着——从形式上讲,您的模式将在所有这3个DBMS中工作,但实际上可能会有问题,因为每个DBMS对该类型都有不同的规则。

MySQL没有NTEXT。它有文本。Postgres也有文本数据类型。不幸的是,文本和NTEXT似乎不是ANSI标准的一部分。我刚刚更新了我的问题,如果可能的话,它应该符合ANSI标准。哪种ANSI取决于使用最多流行的RDBMS时哪种更好。如果我没有弄错的话,SQL Server中的ANSI数据类型fo即
CLOB
text
(支持
varchar(max)
)是不推荐的。MySQL中的
text
只能容纳64k,对于4GB,你需要
LONGTEXT
是的,混乱的
text
LONGTEXT
,你是对的。没有找到关于SQL Server的证据(我的意思是不推荐的
TEXT
data type)-但是如果我错了,我很乐意改进我的帖子。我的意思是证明关键字
TEXT
本身将不可用:“避免在新的开发工作中使用这些[ntext、TEXT和image]数据类型,并计划修改当前使用它们的应用程序”是的,我已经注意到(因为,很明显,在帖子中链接了它)——所以严格来说,这意味着关键字本身也将被删除?(而且不会有向后兼容性)?我对此进行了改进,因为它为我提供了一些有用的信息,帮助我注意相同命名类型的不同大小和规则。我的目标是与ANSI兼容,同时做出一些妥协来支持一些主要的DBMS。我的优先顺序是Postgres、Oracle、MySQL和MSSQL。然而,这不是我最初的问题,我认为你的信息对这个问题通常是有用的。我给这个绿色支票,因为它直接回答了我的答案:“是的,有——CLOB和BLOB。”其他信息也很有用。