0

有一个名为♥-You-Got-Me-♥[www.savevid.com].mp4. 但随着同名文件被插入到 SQL Server 2005 数据库中,人们的心变成了?.

于是名字就变成了?-You-Got-Me-?[www.savevid.com].mp4

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

如果答案中包含命令和图形方法,那就太好了。

4

4 回答 4

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。有类似的方法可以在你的前端搞砸。即使 DB 存储 Unicode,您也必须确保输入和 DB 之间的所有内容,然后返回到您的 UI,都能正确处理多字节字符。

于 2013-01-31T14:57:08.237 回答
1

这不是 CHARSET 问题,而是 SQL Server 中的数据类型问题。SQL Server 没有 CHARSET,因为 MySQL 和排序规则用于代码页、排序和比较

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

于 2013-01-31T14:51:55.880 回答
0

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

SQL小提琴

于 2013-01-31T14:50:59.763 回答
0

将存储文件名的字段类型从 更改varcharnvarchar

例如:

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

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

于 2013-01-31T14:51:57.997 回答