当我看到表格时,我存储的数据存储在问号中。
我的存储过程是这样的:
@word nvarchar(500)
Insert into rub_translate (language_id,name) values (8 ,@word COLLATE HEBREW_CI_AS )
我的数据库处于拉丁校对。任何人都可以给我一个解决方案,如何通过修改列或表来解决这个问题 我的数据库是sql server 提前谢谢
答案 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。但请记住,在一列或多列中存在与数据库不同的排序规则的缺点:当需要比较不同排序规则之间的数据时,需要将collate语句添加到查询中。
答案 1 :(得分:1)
为了实现这一点,您需要执行以下操作:
将应用代码中的输入参数声明为NVARCHAR
(您已完成此操作)
将存储过程中的输入参数声明为NVARCHAR
(没有为此显示代码)
在定义为NVARCHAR
的表格中插入或更新列(您声称是这种情况)
使用NVARCHAR
时,数据库的默认排序规则无关紧要。实际上,当使用NVARCHAR
时,表中列的排序规则是什么并不重要,至少不能正确插入字符。
此外,在COLLATE
语句中指定INSERT
关键字是不必要的,无论如何都无济于事。如果将存储过程输入参数定义为VARCHAR
,则在进入存储过程时,字符已转换为?
。如果列实际定义为VARCHAR
(您没有提供表的DDL),那么如果排序规则不是Hebrew_*
那么您无法做任何事情(除了将数据类型更改为{ {1}}或整理到NVARCHAR
一个。)
如果顶部列出的这三个项目肯定到位,那么最后要检查的是输入值本身。由于这是一个Web应用程序,因此可能无法正确设置页面本身的编码。您需要在Hebrew_
行设置一个断点,并确认cmd.Parameters.Add("@word", System.Data.SqlDbType.NVarChar).Value = word;
变量中保存的值包含希伯来字符而不是word
s。