是什么意思nvarchar
?
是什么区别char
,nchar
,varchar
,和nvarchar
在SQL Server?
我在一些插入T-SQL查询中看到了前缀N. 许多人N
在将值插入表中之前已经使用过.
我搜索过,但是我无法理解N
在将任何字符串插入表格之前包括之前的目的是什么.
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
Run Code Online (Sandbox Code Playgroud) 我正在我的学校使用一个小型网络应用程序的数据库SQL Server 2005
.
我在varchar
vs 的问题上看到了几个思想流派nvarchar
:
varchar
除非你处理了很多国际化的数据,然后使用nvarchar
.nvarchar
用于一切.我开始看到视图2的优点.我知道nvarchar确实占用了两倍的空间,但这不一定是一个大问题,因为这只是为几百名学生存储数据.对我而言,似乎最简单的是不要担心它并且只允许一切使用nvarchar.还是有什么我想念的?
我有以下代码使用存储过程拉回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"??
我生成了一个md5哈希,如下所示:
DECLARE @varchar varchar(400)
SET @varchar = 'è'
SELECT CONVERT(VARCHAR(2000), HASHBYTES( 'MD5', @varchar ), 2)
Run Code Online (Sandbox Code Playgroud)
哪个输出:
785D512BE4316D578E6650613B45E934
Run Code Online (Sandbox Code Playgroud)
但是使用以下方法生成MD5哈希:
System.Text.Encoding.UTF8.GetBytes("è")
Run Code Online (Sandbox Code Playgroud)
产生:
0a35e149dbbb2d10d744bf675c7744b1
Run Code Online (Sandbox Code Playgroud)
C#.NET方法中的编码设置为UTF8,我假设varchar也是UTF8,任何关于我做错的想法?
我有一个动态创建的pandas数据框,其列名不同.我想他们推到SQL,但不希望他们去了MSSQLServer的默认数据类型"文本"(任何人都可以解释为什么这是默认?那岂不是有意义的使用更常见的数据类型? )
有谁知道如何为所有列指定数据类型?
column_errors.to_sql('load_errors',push_conn, if_exists = 'append', index = False, dtype = #Data type for all columns#)
Run Code Online (Sandbox Code Playgroud)
dtype参数采用dict,因为我不知道列是什么,所以很难将它们全部设置为'sqlalchemy.types.NVARCHAR'
这就是我想做的事情:
column_errors.to_sql('load_errors',push_conn, if_exists = 'append', index = False, dtype = 'sqlalchemy.types.NVARCHAR')
Run Code Online (Sandbox Code Playgroud)
任何帮助/理解如何最好地指定所有列类型将不胜感激!
我刚刚收到一位同事的通知,如果你为数据库中的VARCHAR字段分配一个长度,例如VARCHAR(1000),那么数据库将强制数据库为每一行保留1000个字节的空间,无论它是否是需要.
然而,他声称NVARCHAR(1000)字段将只保留所需的字节数.
我已经在这里和网络上尽可能地研究了这个,但是我找不到任何支持它的东西,SQL Server帮助文档也没有提到我能找到的任何地方.
我想创建一个作业,在经过一段时间后从数据库中删除记录.例如,我在新闻表中有一个字段,Time Stamp
每个月SQL查询就像我的数据库中的预定作业一样运行,并删除时间戳为两个月的新闻.一般来说,我想删除2个月前和更早的新闻,不要让我的桌子成为一张大桌子.我怎么能做到这一点?
我创建了一个这样的全局临时表 -
CREATE TABLE ##BigTable
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)
然后尝试重命名Nos列,如下所示 -
EXEC sp_RENAME '##BigTable.Nos' , 'Numbers', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
我收到了错误 -
Either the parameter @objname is ambiguous or the
claimed @objtype (COLUMN) is wrong.
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何解决这个问题呢?
EXTRA与问题不完全相关的东西,但供参考.
我想添加这个 - 我尝试使用像这样的完全限定名称创建全局临时表 -
CREATE TABLE [NotMyTempDataBase].[dbo].[##BigTable]
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用 - 重命名它 -
EXEC tempdb.sys.sp_rename N'[NotMyTempDataBase].[dbo].[##BigTable].Nos',
N'Numbers', N'COLUMN';
Run Code Online (Sandbox Code Playgroud)
错误 -限定的@oldname引用当前数据库以外的数据库.
这是错的.我意识到临时表是在系统数据库tempdb中创建的,即使您在创建它时指定了另一个DB名称.
改用它 -
CREATE TABLE [tempdb].[dbo].[##BigTable]
(Nos varchar(10) null)
Run Code Online (Sandbox Code Playgroud)
--SQL服务器消息:忽略数据库名称'tempdb',引用tempdb中的对象.
EXEC tempdb.sys.sp_rename N'[tempdb].[dbo].[##BigTable].Nos',
N'Numbers', N'COLUMN';
Run Code Online (Sandbox Code Playgroud) 我正在使用Sql Server 2008 R2 Enterprise.我正在编写一个能够插入,更新,删除和从Sql表中选择记录的应用程序.当涉及到包含特殊字符(如ć,čš,đ和ž)的记录时,应用程序会出错.
这是发生的事情:
命令:
INSERT INTO Account (Name, Person)
VALUES ('Boris Borenovi?', 'True')
WHERE Id = '1'
Run Code Online (Sandbox Code Playgroud)
插入一个新记录,但名称字段是Boris Borenovic
,所以字符?
更改为c
.
命令:
SELECT * FROM Account
WHERE Name = 'Boris Borenovi?'
Run Code Online (Sandbox Code Playgroud)
返回正确的记录,所以再次?
替换字符c
并返回记录.
问题:
?
其他特殊字符?Boris Borenovi?
记录,即使查询要求Boris Borenovic
?因此,在保存记录时,我希望Sql能够准确地保存所给出的内容,但是在检索记录时,我希望它能够使用特殊字符.谢谢你的帮助.