2013-01-31 18 views
0

有一个视频文件名为♥-You-Got-Me-♥[www.savevid.com].mp4。但是,随着具有此名称的文件被插入到SQL Server 2005数据库中,心变为?当我将数据插入数据库时​​,心变成问号。如何更改表格的字符集?

所以名字变成?-You-Got-Me-?[www.savevid.com].mp4

我不知道如何更改数据库的字符集?如何更改我的表的字符集,以便它可以覆盖所有字符?

这将是伟大的,如果随着命令,图形方法这样做是包括在答案。

+1

您是将文件名存储在“VARCHAR”类型还是“NVARCHAR”类型中? – bendataclear

+0

@bendataclear'varchar' – saplingPro

+0

使用'nvarchar'将允许您将char代码存储到您的**心**的内容 – GolfWolf

回答

3

你并不需要更改字符集的数据库。只要你使用NVARCHAR类型,你应该在数据库方面很好。但是,你必须确保无论你如何获取数据到表中需要统一考虑:

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个中文字的前面。有类似的方法可以在你的前端搞砸了。即使DB存储Unicode,也必须确保输入和数据库之间的所有内容,然后返回到用户界面,才能正确处理多字节字符。

0

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

SQL Fiddle

1

它不是一个charset问题,但在SQL Server中的数据类型的问题。 SQL Server没有像MySQL这样的CHARSET,并且Collations are for code page, sorting and comparing

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

+0

我已更改为nvarchar,但数据仍有问号而不是心脏 – saplingPro

+2

@saplingPro:** how **你插入?如果你正在使用字符串文字 - 你是否在用'N'...''来标记它们为Unicode? –

+1

@marc_s谢谢!我错过了'N' – saplingPro

0

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

例如:

表:
FilenameId INT IDENTITY 名NVARCHAR(200)

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

相关问题