2013-01-31 54 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')

相關問題