DBに関する質問ですVarcharのエリアにエスケープシーケンスコードを格納出来るでしょうか?

やりたいことは
 TSV(TAB区切りのデータ)をそのままVarcharエリアに保存したい
です

DBMS:SqlServer2008

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/12 10:01:39
  • 終了:2013/03/13 23:38:24

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4559ベストアンサー獲得回数19032013/03/12 10:21:37

ポイント270pt

エスケープシーケンスとタブ区切り(TSV)が、どうつながるのかよく分からないですが、基本的に格納できますよ。
プログラムでの文字列リテラル中で、バックスラッシュで指定する \t なんかのことをエスケープシーケンスと言われているとしたら、\t はデータとしては「タブ文字」そのもので、プログラムのソース上、あのような表記をしている、というだけです。

「基本的に」と書いたのは、文字コードの変換なんかがあったりするからです。
\t (TAB) なんかは、どのコードページでも同じなので気にすることは無いと思います。


一応、リファレンスの引用を。

char および varchar (Transact-SQL) @MSDN

varchar [ ( n | max ) ]
  Unicode ではない可変長の文字型データです。
...
COLLATE 句で特定の照合順序を指定しない限り、char 型または varchar 型を使用するオブジェクトにはデータベースの既定の照合順序が割り当てられます。


nchar および nvarchar (Transact-SQL) @MSDN

nvarchar [ ( n | max ) ]
  可変長の UNICODE 文字データです。

id:gin106

仰る通り\tをシーケンス文字と言ってました

insert into TBL-A(TSV-VAL) values ('あああ\tいいい\t111\t123.45\tううう')
てな感じのSQL文で書き込んで
読み出せる・・・と言う事ですよね?

2013/03/12 11:20:15
id:a-kuma3

insert into TBL-A(TSV-VAL) values ('あああ\tいいい\t111\t123.45\tううう')
てな感じのSQL文で書き込んで
読み出せる・・・と言う事ですよね?

半分だけ Yes 。
エスケープシーケンスは、プログラム言語で決めているものなので、その SQL を何を使って実行するかによって変わってきます。
C とか C# であれば、そのまま実行できます。
VB や VB.NET だと vbTab や ControlChars.Tab を使って文字列を連結することになるでしょう。

エスケープシーケンスっていうのは、ある文字を(その言語の文字列リテラル中で)どうやって表現するか、ということなので、
C の "あああ\tいいい\tううう" も
VB の "あああ" & vbTab & "いいい" & vbTab & "ううう" も
データとしては "あああ[TAB]いいい[TAB]ううう" を表しているんです。

2013/03/12 21:31:02

その他の回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4559ベストアンサー獲得回数19032013/03/12 10:21:37ここでベストアンサー

ポイント270pt

エスケープシーケンスとタブ区切り(TSV)が、どうつながるのかよく分からないですが、基本的に格納できますよ。
プログラムでの文字列リテラル中で、バックスラッシュで指定する \t なんかのことをエスケープシーケンスと言われているとしたら、\t はデータとしては「タブ文字」そのもので、プログラムのソース上、あのような表記をしている、というだけです。

「基本的に」と書いたのは、文字コードの変換なんかがあったりするからです。
\t (TAB) なんかは、どのコードページでも同じなので気にすることは無いと思います。


一応、リファレンスの引用を。

char および varchar (Transact-SQL) @MSDN

varchar [ ( n | max ) ]
  Unicode ではない可変長の文字型データです。
...
COLLATE 句で特定の照合順序を指定しない限り、char 型または varchar 型を使用するオブジェクトにはデータベースの既定の照合順序が割り当てられます。


nchar および nvarchar (Transact-SQL) @MSDN

nvarchar [ ( n | max ) ]
  可変長の UNICODE 文字データです。

id:gin106

仰る通り\tをシーケンス文字と言ってました

insert into TBL-A(TSV-VAL) values ('あああ\tいいい\t111\t123.45\tううう')
てな感じのSQL文で書き込んで
読み出せる・・・と言う事ですよね?

2013/03/12 11:20:15
id:a-kuma3

insert into TBL-A(TSV-VAL) values ('あああ\tいいい\t111\t123.45\tううう')
てな感じのSQL文で書き込んで
読み出せる・・・と言う事ですよね?

半分だけ Yes 。
エスケープシーケンスは、プログラム言語で決めているものなので、その SQL を何を使って実行するかによって変わってきます。
C とか C# であれば、そのまま実行できます。
VB や VB.NET だと vbTab や ControlChars.Tab を使って文字列を連結することになるでしょう。

エスケープシーケンスっていうのは、ある文字を(その言語の文字列リテラル中で)どうやって表現するか、ということなので、
C の "あああ\tいいい\tううう" も
VB の "あああ" & vbTab & "いいい" & vbTab & "ううう" も
データとしては "あああ[TAB]いいい[TAB]ううう" を表しているんです。

2013/03/12 21:31:02
id:oil999 No.2

oil999回答回数1728ベストアンサー獲得回数3202013/03/12 20:13:32

ポイント30pt

insert into TBL-A(TSV-VAL) values ('あああ\tいいい\t111\t123.45\tううう');


バックスラッシュで始まるエスケープ記号をvarcharに格納することはできますが、データベースによってはバックスラッシュをそのまま文字列として受け付けないものがあります。
詳しい事情は下記サイトをご覧ください。
http://www.tokumaru.org/d/20080601.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません