标签: nvarchar

将国家字符插入oracle NCHAR或NVARCHAR列不起作用

在oracle数据库中插入字符串时,一些国家字符会被问号替换,即使它们插入NCHAR或NVARCHAR列 - 应该能够处理所有Unicode字符.

使用Oracle的SQL Developer,sqlplus或使用JDBC驱动程序会发生这种情况.

数据库NLS_CHARACTERSET设置为WE8ISO8859P1(西欧iso-8859-1).用于NCHAR列的NLS_NCHAR_CHARACTERSET设置为AL16UTF16.(UTF-16)

任何不在NLS_CHARACTERSET中的字符似乎都被替换为反转的问号.

java oracle unicode nvarchar sqlplus

6
推荐指数
1
解决办法
1万
查看次数

你的 Nvarchar() 有多大

设计数据库时,在决定 nvarchar 应该有多大时,您会考虑哪些决定。

如果我要制作一个地址表,我的直觉反应是地址行 1 为 nvarchar(255),就像旧的访问数据库一样。

我发现使用这个让我对旧的“字符串将被截断”感到烦恼。我知道可以通过限制输入框来防止这种情况,但如果用户确实拥有超过 255 的地址行,则应该允许这种情况。

我应该让我的 nvarchar(????) 有多大

database sql-server database-design nvarchar

5
推荐指数
1
解决办法
6087
查看次数

varchar()和nvarchar()之间奇怪的SQL Server 2005整理差异

有人可以解释一下:

SELECT 
  CASE WHEN CAST('iX' AS nvarchar(20)) 
      > CAST('-X' AS nvarchar(20)) THEN 1 ELSE 0 END,
  CASE WHEN CAST('iX' AS varchar(20)) 
      > CAST('-X' AS varchar(20)) THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

结果: 0 1

SELECT 
  CASE WHEN CAST('i' AS nvarchar(20)) 
      > CAST('-' AS nvarchar(20)) THEN 1 ELSE 0 END,
  CASE WHEN CAST('i' AS varchar(20)) 
      > CAST('-' AS varchar(20)) THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

结果: 1 1

在第一个查询中,nvarchar()结果不是我所期望的,但是删除Xmake会使nvarchar()排序按预期发生.

(我原来的查询中使用的''N''文字语法来区分varchar()nvarchar() …

t-sql unicode nvarchar sql-server-2005 collation

5
推荐指数
1
解决办法
1487
查看次数

如何在SQL Server中强制nvarchar输入宽度?

我有一个我为我们的生产线创建的脚本,用户在执行之前将一些变量输入到脚本中.问题是变量是NVARCHAR(9),如果用户输入10个字符,那么最后一个字符被切断(正如预期的那样)我想知道的是如果输入一个值,我怎么能让SQL抛出一个错误太长?这个问题源于用户指责他们的输入.例:

Valid input - 
DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = N'ABCDEFGHI'
SELECT  @ClientCode

Results
ABCDEFGHI
Run Code Online (Sandbox Code Playgroud)

输入无效 -

DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = 'ABCDDEFGHI'
SELECT @ClientCode

Results
ABCDDEFGH
Run Code Online (Sandbox Code Playgroud)

我希望的是一个SSMS会引发错误的设置.我希望避免的是 -

DECLARE @ClientCode NVARCHAR(50)
...

IF LEN(@ClientCode) > 9
RAISERROR('Too long dummy.',16,1)
Run Code Online (Sandbox Code Playgroud)


谢谢你的帮助

sql-server error-handling nvarchar

5
推荐指数
1
解决办法
470
查看次数

在SQL Server 2008中将NVARCHAR转换为DATETIME

在我的桌子上

LoginDate  
2013-08-29 13:55:48  
Run Code Online (Sandbox Code Playgroud)

loginDate列的数据类型是nvarchar(150)

我想logindate使用SQL命令将列转换为日期时间格式

预期结果.

LoginDate  
29-08-2013 13:55:48
Run Code Online (Sandbox Code Playgroud)

sql datetime nvarchar sql-server-2008-r2

5
推荐指数
2
解决办法
10万
查看次数

MaxLength及其如何影响查询

我正在使用Entity Framework 4.3.1,代码优先,我正在查看正在生成的查询的SQL事件探查器.这是一个例子:

正如您所看到的 - 它指定了参数,nvarchar(max)但在我的配置中,我指定了一个MaxLength值.因此,我希望参数将作为参数传递.nvarchar(n) 因为它没有这样做,我们发现查询运行缓慢,这个简单的更改会加快它们的速度.

有谁知道我们如何说服实体框架生成正确的nvarchar长度?

这是我的实体和配置代码:

实体

public class StorageTransportOrderItem 
{
    public string StorageTransportOrderItemNumber { get; set; }
    public string StorageNumber { get; set; }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

组态

ToTable("StorageTransportOrderItem");

Property(p => p.StorageTransportOrderNumber)
    .HasMaxLength(10);
Property(d => d.StorageTransportOrderItemNumber)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
    .HasMaxLength(4);

HasKey(d => new
{
    d.StorageTransportOrderItemNumber,
    d.StorageNumber,
    d.StorageTransportOrderNumber
 });
Run Code Online (Sandbox Code Playgroud)

示例查询

FROM [dbo].[StorageTransportOrder] AS [Extent1]
WHERE ([Extent1].[StorageNumber] = @p__linq__0) AND ([Extent1]
[StorageTransportOrderNumber] = @p__linq__1)
)  AS [Limit1]',N'@p__linq__0 nvarchar(max) ,@p__linq__1 nvarchar(max)  
',@p__linq__0=N'200',@p__linq__1=N'0001374850'
Run Code Online (Sandbox Code Playgroud)

请注意nvarchar(max),这是使它变慢的原因.

sql sql-server performance entity-framework nvarchar

5
推荐指数
1
解决办法
613
查看次数

数据类型ntext和nvarchar在等于运算符中不兼容

我有一个问题,我不知道如何解决它.

我在数据库中有一个简单的表

CREATE TABLE [dbo].[home] (
    [Id]   INT   NOT NULL,
    [text] NTEXT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
Run Code Online (Sandbox Code Playgroud)

我在visual studio 2012中使用FormView,FormView与数据库的Home表连接,并且有编辑/更新/删除选项.

问题是当我尝试更新te数据库中的文本时出现错误

The data types ntext and nvarchar are incompatible in the equal to operator.
Run Code Online (Sandbox Code Playgroud)

请帮帮忙..

这是我用来在DB中编写的代码:

    <%@ Page Title="" Language="C#" MasterPageFile="~/admin/adminmaster.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="admin_Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:FormView ID="FormView1" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSource1">
        <EditItemTemplate>
            text:
            <asp:TextBox Text='<%# Bind("text") %>' runat="server" ID="textTextBox" /><br />
            Id:
            <asp:Label Text='<%# Eval("Id") %>' runat="server" ID="IdLabel1" /><br …
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net nvarchar ntext

5
推荐指数
2
解决办法
9765
查看次数

JDBC 类型没有方言映射:-9 w/Hibernate 3 &amp; Oracle 10g

我们最近开始在之前运行的应用程序中看到此错误。没有进行任何代码更改来导致错误,也没有更改数据库(据我所知)。据说最近对服务器的数据源配置(驱动程序版本)进行了一些更改,但我没有明确的细节。

应用程序在失败操作中使用的表中没有任何 nvarchar2 列。hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

oracle hibernate nvarchar jdbc

5
推荐指数
1
解决办法
1982
查看次数

如何将 PHP PDO ODBC 与 SQL Server 和 Unicode 字符结合使用?

如果没有一些手动编码,PHP PDO ODBC 似乎无法存储 NVARCHAR 字符 (UTF-16)。这似乎是互联网上一个相当常见的“错误”,而且似乎没有人有明确的解决方案。

\n\n

如何重现该错误

\n\n
    \n
  1. 尝试使用 PDO 插入以下日语字符:(\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf意思是你好)
  2. \n
  3. 以下内容将存储在您的数据库中:\xc3\xa3\xe2\x80\x9c\xc3\xa3\xe2\x80\x9a\xe2\x80\x9c\xc3\xa3\xc2\xab\xc3\xa3\xc2\xa1\xc3\xa3\xc2\xaf
  4. \n
  5. 然后通过 PDO 检索它并将其打印在屏幕上,您将得到:\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf
  6. \n
\n\n

情况还不错,但也不好。PHP 可以工作,但是当您有其他不是 PHP 的应用程序从您的数据库访问该信息时,它们将得到错误的字符串:\xc3\xa3\xe2\x80\x9c\xc3\xa3\xe2\x80\x9a\xe2\x80\x9c\xc3\xa3\xc2\xab\xc3\xa3\xc2\xa1\xc3\xa3\xc2\xaf

\n\n

理想情况下,您希望到处\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf都有。

\n\n

症状

\n\n

PDO 似乎没有任何 NVARCHAR 的概念,即使用 16 位编码的字符。事实上,您通过 PDO 传递到 SQL SERVER 或从 SQL SERVER 检索的所有内容都将以 8 位为单位。如何“证明”呢?这里是 :

\n\n
    \n
  1. 你从日语字符串开始\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf
  2. \n
\n\n

您首先必须知道 PHP 将字符串视为二进制并且(如果这样设置)它将以 UTF-8 存储它们。

\n\n

因此,如果我们查看 的二进制表示形式\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf,您将得到E38193E38293E381ABE381A1E381AFSQL SERVER 为您提供的二进制表示形式\xc3\xa3\xe2\x80\x9c\xc3\xa3\xe2\x80\x9a\xe2\x80\x9c\xc3\xa3\xc2\xab\xc3\xa3\xc2\xa1\xc3\xa3\xc2\xaf。(取决于您的整理)

\n\n …

php sql-server odbc pdo nvarchar

5
推荐指数
1
解决办法
3015
查看次数

`sp_executesql` 真的接受 `nvarchar(max)` 参数吗?

摘要:EXEC sp_executesql @code失败的含量比4000更长@code,但@code不截断为4000个Unicode字符。

我正在观察 SQL Server 2014 Developer Edition 上的问题。

更多细节:我的 SQL 安装脚本动态定义了一些代码,因为它应该修改代码以反映环境(只有一次,在安装过程中)。让以下@datasource变量捕获特定环境的结果:

DECLARE @datasource nvarchar(100) = N'testdb.dbo.source_table'
Run Code Online (Sandbox Code Playgroud)

@code变量声明为的nvarchar(max)类型和REPLACE函数用于修改字符串根据需要(即,以取代由所述占位符@datasource内容) -见下面的代码段。

在 Management Studio 中执行sp_executesql@code,显示以下错误:

消息 156,级别 15,状态 1,过程 my_sp,第 86 行
关键字“AS”附近的语法不正确。
消息 102,级别 15,状态 1,过程 my_sp,第 88 行
“WHERE”附近的语法不正确。

下面的代码片段是上述方式失败的代码的精确副本(将被复制)。功能可能并不重要——可能只有代码的长度很重要。的@code内容显然是由截短sp_executesql; 但是,它不应该是(见下文):

-- ... repeated from above
DECLARE @datasource nvarchar(100) = N'testdb.dbo.source_table'

DECLARE @code nvarchar(MAX) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server limits nvarchar sql-server-2014

5
推荐指数
1
解决办法
2724
查看次数