主键列长度的限制是多少?我将使用varchar作为主键.我发现没有信息,它可以多长时间,因为PostgreSQL在用作主键时不需要指定varchar限制?
listagg是Oracle 11.2中引入的一个函数!现在这个功能正在困扰我们分配,我们正在从MySQL迁移到Oracle,我们有这个查询:
SELECT
p_id,
MAX(registered) AS registered,
listagg(MESSAGE, ' ') within GROUP (ORDER BY registered) AS MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;
Run Code Online (Sandbox Code Playgroud)
只要我们知道在Oracle下面有什么烦恼它就会返回VARCAR而不是我们需要的CLOB! 文字很大,我们确实需要它是CLOB!
这是我试图做的!
创建一个CLOB类型的CLOB_T表!
然后创建功能
create or replace
function listaggclob (t in clob_t)
return clob
as
ret clob := '';
i number;
begin
i := t.first;
while i is not null loop
if ret is not null then
ret := ret || ' ';
end if;
ret := ret || t(i);
i := t.next(i);
end loop; …Run Code Online (Sandbox Code Playgroud) 免责声明:我对SQL和数据库一般都很陌生.
我需要创建一个最多可存储32个字符的文本数据的字段." VARCHAR(32)" 是否意味着我的数据中只有32个字符?我是否需要为空终止保留额外的字符?
我进行了一个简单的测试,看起来这是一个WYSIWYG缓冲区.但是,我想从那些真正知道自己在做什么的人那里得到一个具体的答案.
我有一个C [++]背景,所以这个问题在我脑海中引起了警钟.
参考关于字符类型的Postgres文档,我不清楚指定字符变化(varchar)类型的长度.
假设:
它确实提到:
短字符串(最多126个字节)的存储要求是1个字节加上实际字符串,其中包括字符空间填充.较长的字符串有4个字节的开销而不是1.长字符串由系统自动压缩,因此磁盘上的物理要求可能更少.非常长的值也存储在后台表中,因此它们不会干扰对较短列值的快速访问.在任何情况下,可存储的最长字符串大约为1 GB.(数据类型声明中n允许的最大值小于此值.更改此值没有用,因为使用多字节字符编码时,字符数和字节数可能会大不相同.
这是关于字符串的大小,而不是字段的大小,(听起来它总是会压缩大型varchar字段中的大字符串,而不是大型varchar字段中的小字符串?)
我问这个问题,因为指定一个更大的尺寸会更容易(和懒惰),所以你永远不必担心字符串太大.例如,如果我为地名指定varchar(50),我将获得具有更多字符的位置(例如Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch),但如果我指定varchar(100)或varchar(500),我就不太可能得到这个问题.
如果您的最大字符串长达400个字符,那么你会在varchar(500)和(任意)varchar(5000000)或text()之间获得性能影响吗?
如果有人对此有答案并且知道其他数据库的答案,也不感兴趣,请添加它.
我用谷歌搜索,但没有找到足够技术性的解释.
我正在尝试这样做:
DECLARE @myVar VARCHAR(MAX)
Loop with cursor
select @myVar = @myVar + bla bla bla
end loop
Run Code Online (Sandbox Code Playgroud)
循环结束时,@ myVar不完整,只包含8000个字符.
我曾尝试使用文本,但不允许使用本地变量.
对这个案子有什么好处?
xml var?
我刚看过这篇文章:
如何在SQL Server 2000中传递大于varchar(8000)的字符串参数?
还有其他人通过网络.
问候.
我目前有一个数据库表设置如下(EAV - 业务原因是有效的):
这允许我将混合值作为键/值对添加到我的数据库中.例如:
1 | 'Some Text' | 'Hello World'
2 | 'Some Number' | '123456'
etc.
Run Code Online (Sandbox Code Playgroud)
在我的C#代码,我用ADO.Net使用reader.GetString(2);检索值作为一个字符串,然后让我的代码的其他地方将其转换为所需,例如... Int32.ParseInt(myObj.Value);.我正在考虑通过将value列更改为sql_variant数据类型来增强我的表,但我不知道这会带来什么好处?基本上,它有什么优势将我的价值列是sql_variantVS varchar(1000)?
为了更清楚,我在某处读到sql_variant以nvarchar(4000)的形式返回给调用的客户端(ouch)!但是,在返回它之前,我不能把它转换成它的类型吗?显然,我的代码必须进行调整,以将值存储为对象而不是字符串值.我想,sql_variant在我目前的情况下使用与其他类型相比有哪些优点/缺点?哦,值得一提的是我计划存储的所有内容都是值列中的日期时间,字符串和数字类型(int,decimal等); 我不计划存储和blob或图像等.
当我尝试将varchar字段转换为double(数字)时,我的查询有问题.我有这个sql语句:
SELECT fullName, CAST(totalBal as numeric(9,2) FROM client_info ORDER BY totalBal DESC
Run Code Online (Sandbox Code Playgroud)
实际上我想以totalBal降序显示值.但由于该字段位于varchar中,因此结果集有时是错误的.当我尝试使用此语句进行查询时,这是结果集:
SELECT fullName, totalBal FROM client_info ORDER BY totalBal DESC
Run Code Online (Sandbox Code Playgroud)
结果集是:

排序totalBal不正确.所以我决定将varchar转换为数字,以便它可以完美地排序.任何的想法?
如何将GUID作为36字符转换为VARCHAR(32)?
我正在尝试将数据从一个表复制到另一个表.这两个表中有两个相似的列.
36,因为连字符是总长度的字符我正在寻找一种方法将GUID转换为VARCHAR,但我必须删除连字符.到目前为止,我试图找到一种方法是不成功的.
如果数据库中有2列,例如.
code varchar(3)
name nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
如何通过代码告诉hibernate传递varchar?
在hibernate映射中,字符串映射到nvarchar,它产生如下查询:
Select code, name From table where code=N'AAA' (instead of code='AAA')
Run Code Online (Sandbox Code Playgroud)
这是非常糟糕的,因为它导致索引扫描而不是索引搜索操作(扫描所有索引节点而不是直接转到请求的节点)
由于代码在数百万行以及多个索引和外键中使用,因此将其从varchar更改为nvarchar将导致性能下降(更多IO操作,因为nvarchar使用的空间比varchar多两倍).
有没有办法告诉hibernate根据数据库类型进行映射,而不是Java类型?
谢谢
我想知道varcharSQL Server 2000中的最大大小是什么.当我在某处搜索时,它写了8000个字符,某处写了8060字节.哪一个是正确的?
varchar ×10
sql ×6
mysql ×2
postgresql ×2
sql-server ×2
c# ×1
clob ×1
database ×1
guid ×1
hibernate ×1
max ×1
numeric ×1
nvarchar ×1
oracle ×1
performance ×1
primary-key ×1
sql-variant ×1
ssms ×1
types ×1