0

という名前のビデオファイルがあります♥-You-Got-Me-♥[www.savevid.com].mp4。ただし、この名前のファイルがSQL Server 2005データベースに挿入されると、ハートがに変わります?

そのため、名前はに変わります?-You-Got-Me-?[www.savevid.com].mp4

データベースの文字セットを変更する方法がわかりませんか?テーブルのcharセットを変更して、すべての文字を上書きできるようにするにはどうすればよいですか?

コマンドと一緒に、そうするためのグラフィカルな方法が答えに含まれていると素晴らしいでしょう。

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 には、MySQL のような CHARSET 自体がありません。照合順序は、コード ページ、並べ替え、比較用です。

nvarcharUnicode (基本的に非ラテン) データを適切に保存するには、 を使用する必要があります。

于 2013-01-31T14:51:55.880 に答える
0

問題は を使用している可能性があります。VARCHAR可能であれば、NVARCHARタイプを変更すると新しいエントリの問題が解決するはずです。列のタイプを変更できない場合は、さらに複雑になる可能性があります。

SQL フィドル

于 2013-01-31T14:50:59.763 に答える
0

ファイル名を格納するフィールドのタイプを から に変更しvarcharますnvarchar

例えば:

表:
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 に答える