它只nvarchar
支持多字节字符吗?如果是这种情况,除了存储问题之外,还有什么意义varchars
吗?
我正在我的学校使用一个小型网络应用程序的数据库SQL Server 2005
.
我在varchar
vs 的问题上看到了几个思想流派nvarchar
:
varchar
除非你处理了很多国际化的数据,然后使用nvarchar
.nvarchar
用于一切.我开始看到视图2的优点.我知道nvarchar确实占用了两倍的空间,但这不一定是一个大问题,因为这只是为几百名学生存储数据.对我而言,似乎最简单的是不要担心它并且只允许一切使用nvarchar.还是有什么我想念的?
在SQL Server 中使用nvarchar(max)
vs. NText
数据类型有哪些优缺点?我不需要向后兼容性,因此nvarchar(max)
在较旧的SQL Server版本中不支持它.
编辑:很显然的问题也适用于TEXT
和IMAGE
对比varchar(max)
,并varbinary(max)
为那些寻找那些数据类型之后.
我们必须使用Unicode类型时是否有规则?
我已经看到大多数欧洲语言(德语,意大利语,英语......)在VARCHAR列中的同一数据库中都很好.
我正在寻找类似的东西:
那么服务器/数据库的整理呢?
我不想像这里建议的一样使用NVARCHAR.varchar 和nvarchar SQL Server数据类型之间的主要性能差异是什么?
和,CHAR
(CHARACTER)
以及VARCHAR
(CHARACTER VARYING)
,SQL提供NCHAR
(NATIONAL CHARACTER)
和NVARCHAR
(NATIONAL CHARACTER VARYING)
类型.在某些数据库中,这是用于字符(非二进制)字符串的更好的数据类型:
在SQL Server中,NCHAR
存储为UTF-16LE,是唯一可靠地存储非ASCII字符的方法,仅CHAR
作为单字节代码页;
在Oracle中,NVARCHAR
可以存储为UTF-16或UTF-8而不是单字节排序规则;
但在MySQL,NVARCHAR
是VARCHAR
,所以它没有什么区别,任一类型的可以存储使用UTF-8或任何其他排序规则.
那么,NATIONAL
实际上在概念上意味着什么呢?供应商的文档仅告诉您自己的DBMS使用哪些字符集,而不是实际的基本原理.与此同时,SQL92标准对该功能的解释更为有帮助,仅说明NATIONAL CHARACTER
存储在实现定义的字符集中.而不是仅仅CHARACTER
存储在实现定义的字符集中.这可能是一个不同的实现定义的字符集.或不.
谢谢,ANSI.Thansi.
是否应该NVARCHAR
用于所有字符(非二进制)存储目的?是否有当前流行的DBMS,它会做一些不受欢迎的事情,或者只是不识别关键字(或N''
文字)?
Ergo:今天设计SQL Server数据库时,应始终使用NVARCHAR.
这听起来有道理吗?有没有人不同意任何前提?今天有没有理由在NVARCHAR上选择VARCHAR?
我想知道在定义nvarchar(max)类型的列时是否有任何缺点,而不是给它一个(更小的)最大大小.
我在某处读到,如果列值超过4?KB,剩余数据将被添加到"溢出"区域,这没关系.
我正在创建一个表格,其中大部分时间文本都是几行,但我想知道设置下限是否有任何优势,然后添加验证以避免违反该限制.
使用nvarchar(max)列创建索引是否有任何限制,或者是否需要在大小限制上添加限制?
谢谢!
这是我的困境.
基本上,我需要一个表中的列来保持未知长度的字符.但我很好奇,如果在一个列中使用VARCHAR(MAX)或NVARCHAR(MAX)可能会出现Sql Server性能问题,例如:'这次'我只需要存储3个字符,而且大部分时间我只需要存储10个字符.但是在该专栏中可能会有几千个字符,甚至可能是一百万字,这是一个很小的机会,这是不可预测的.但是,我可以保证它不会超过2GB的限制.
我只是好奇是否有任何性能问题,或者可能有更好的方法来解决这个问题.
我有以下代码使用存储过程拉回DataTable并输入字符串参数@JobNumbers,这是动态创建的作业编号字符串(因此长度未知):
using (SqlConnection connection = new SqlConnection(con))
{
SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
cmd.Parameters["@JobNumbers"].Value = JobNumber;
SqlDataAdapter da = new SqlDataAdapter(cmd);
connection.Open();
da.Fill(JobDetails);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我当前将JobNumber参数设置为4000的长度,这应该足以承担大约500个作业号并且应该足够了.但是,有可能在奇怪的场合需要更多.所以,我想知道,有没有办法将参数设置为nvarchar(max)的等效sql参数类型?
我已经看过各种类似的问题(将参数传递给SQLCommand的最佳方法是什么?)但没有具体说明你是否可以(或不能)这样做.其次,如果我将存储过程中的@JobNumber参数设置为nvarchar(max),甚至需要这样做,因此我可能根本不需要在C#中设置长度?如果我这样做,这将有潜在的性能问题,如此问题中所建议的在添加SqlCommand参数时何时应该使用"SqlDbType"和"size"??
我有一个数据库,将保留日志条目.
日志表中的一列包含序列化(到XML)对象,我的团队中的一个人建议使用XML数据类型而不是NVARCHAR(MAX).该表将"永久"保存日志(将来可能会考虑归档一些非常旧的条目).
我有点担心CPU开销,但我更担心数据库可以增长得更快(引用问题的FoxyBOA在使用XML时会增加70%的数据库).
我已经阅读了这个问题 ,它给了我一些想法,但我特别感兴趣的是澄清数据库大小是增加还是减少.
能否请您分享您在这方面的见解/经验.
BTW.我目前没有必要依赖SQL Server中的XML功能(在特定情况下,我几乎没有优势).将提取偶尔的日志条目,但我更喜欢使用.NET处理XML(通过编写小型客户端或使用.NET程序集中定义的函数).
nvarchar ×10
sql-server ×9
varchar ×3
sql ×2
t-sql ×2
c# ×1
collation ×1
indexing ×1
oracle ×1
performance ×1
sqlparameter ×1
storage ×1
text ×1
unicode ×1
xml ×1