将数据插入数据库时​​,Hearts会更改为问号。如何更改表格的字符集?

时间:2013-01-31 14:43:47

标签: sql sql-server character-encoding

有一个名为♥-You-Got-Me-♥[www.savevid.com].mp4的视频文件。但是,当具有此名称的文件插入到SQL Server 2005数据库中时,心脏将更改为?

因此名称变为?-You-Got-Me-?[www.savevid.com].mp4

我不知道如何更改数据库的字符集?如何更改表格的字符集以使其可以覆盖所有字符?

如果与命令一起使用图形方法,这将是很好的答案。

4 个答案:

答案 0 :(得分:3)

您无需更改数据库的字符集。只要您使用NVARCHAR类型,您就应该在数据库方面做得很好。但是,您必须确保将数据放入表中时考虑到Unicode:

DECLARE @VAR VARCHAR(100) = N'♥-You-Got-Me-♥[www.savevid.com].mp4'
    , @NVAR NVARCHAR(100) = N'♥-You-Got-Me-♥[www.savevid.com].mp4'
    , @oops NVARCHAR(100) = '♥-You-Got-Me-♥[www.savevid.com].mp4'

SELECT 
    @VAR
    , @NVAR
    , @oops;

返回:

?-You-Got-Me-?[www.savevid.com].mp4 ♥-You-Got-Me-♥[www.savevid.com].mp4 ?-You-Got-Me-?[www.savevid.com].mp4

最后一个声明省略了文字前面的N.有类似的方法可以搞清楚你的​​前端。即使数据库存储了Unicode,您也必须确保输入和数据库之间的所有内容,然后返回到您的UI,才能正确处理多字节字符。

答案 1 :(得分:1)

这不是CHARSET问题,而是SQL Server中的数据类型问题。 SQL Server没有像MySQL和Collations are for code page, sorting and comparing

这样的CHARSET

您需要使用nvarchar正确存储unicode(基本上是非拉丁语)数据。

答案 2 :(得分:0)

问题可能是使用VARCHAR,如果可能,更改为NVARCHAR类型应解决新条目的问题。如果您无法更改列类型,则可能会变得更复杂。

SQL Fiddle

答案 3 :(得分:0)

将存储文件名的字段类型从varchar更改为nvarchar

例如:

表:
FilenameId INT IDENTITY 文件名NVARCHAR(200)

插入数据的SQL:
INSERT INTO TestTable ([Filename]) VALUES(N'♥-You-Got-Me-♥[www.savevid.com].mp4')