有一个名为♥-You-Got-Me-♥[www.savevid.com].mp4
的视频文件。但是,当具有此名称的文件插入到SQL Server 2005数据库中时,心脏将更改为?
。
因此名称变为?-You-Got-Me-?[www.savevid.com].mp4
。
我不知道如何更改数据库的字符集?如何更改表格的字符集以使其可以覆盖所有字符?
如果与命令一起使用图形方法,这将是很好的答案。
答案 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
类型应解决新条目的问题。如果您无法更改列类型,则可能会变得更复杂。
答案 3 :(得分:0)
将存储文件名的字段类型从varchar
更改为nvarchar
。
例如:
表:
FilenameId INT IDENTITY
文件名NVARCHAR(200)
插入数据的SQL:
INSERT INTO TestTable ([Filename]) VALUES(N'♥-You-Got-Me-♥[www.savevid.com].mp4')