我试图在列表中插入希伯来语的数据,数据类型为nvarchar

时间:2017-03-21 11:48:01

标签: sql sql-server

当我看到表格时,我存储的数据存储在问号中。

我的存储过程是这样的:

@word nvarchar(500)
Insert into rub_translate (language_id,name) values (8 ,@word COLLATE HEBREW_CI_AS )

我的数据库处于拉丁校对。任何人都可以给我一个解决方案,如何通过修改列或表来解决这个问题 我的数据库是sql server 提前谢谢

2 个答案:

答案 0 :(得分:1)

您可以按原样插入,因为它是unicode然后是select it with a proper collation

    declare @test table([name] nvarchar(500) collate Latin1_General_CI_AS);

    declare @word nvarchar(500) = N'זה טקסט.';

    insert into @test ( [name] ) values  ( @word );

    select [t].[name] collate Hebrew_CI_AS from @test as [t]

或者您可以在表格中change the collation of that one column。但请记住,在一列或多列中存在与数据库不同的排序规则的缺点:当需要比较不同排序规则之间的数据时,需要将collat​​e语句添加到查询中。

答案 1 :(得分:1)

为了实现这一点,您需要执行以下操作:

  1. 将应用代码中的输入参数声明为NVARCHAR(您已完成此操作)

  2. 将存储过程中的输入参数声明为NVARCHAR(没有为此显示代码)

  3. 在定义为NVARCHAR的表格中插入或更新列(您声称是这种情况)

  4. 使用NVARCHAR时,数据库的默认排序规则无关紧要。实际上,当使用NVARCHAR时,表中列的排序规则是什么并不重要,至少不能正确插入字符。

    此外,在COLLATE语句中指定INSERT关键字是不必要的,无论如何都无济于事。如果将存储过程输入参数定义为VARCHAR,则在进入存储过程时,字符已转换为?。如果列实际定义为VARCHAR(您没有提供表的DDL),那么如果排序规则不是Hebrew_*那么您无法做任何事情(除了将数据类型更改为{ {1}}或整理到NVARCHAR一个。)

    如果顶部列出的这三个项目肯定到位,那么最后要检查的是输入值本身。由于这是一个Web应用程序,因此可能无法正确设置页面本身的编码。您需要在Hebrew_行设置一个断点,并确认cmd.Parameters.Add("@word", System.Data.SqlDbType.NVarChar).Value = word;变量中保存的值包含希伯来字符而不是word s。