• ベストアンサー

varchar型の入力できる最大文字数について

varcharでサイズを8000にしたフィールドに1000文字(例えば’aaa・・・「a」を1000文字・・・’)INSERTした後にそのフィールドをSELECTすると256文字しか入っていません。どうしてなんでしょうか? SELECT、INSERTなどのSQLの実行は”クエリ アナライザ”や”SQL Server Enterprise Manager”で試しました。 SQLServer初心者です。何卒宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

使用しているツールの側で、文字列の受け取りバッファの大きさを256文字分しか用意していないのかもしれません。 そのvarcharフィールドに対して SELECT LEN(そのフィールド) FROM テーブル を実行すると、そのフィールドの中の文字列の長さが返りますが、それも256でしょうか。 もし上記SELECTの結果が256ではない(もっと大きい)場合は、256文字しか表示されないのはツール側の受け取りバッファが小さいだけで、実際に記録されている文字列はもっと長いということになります。 #SQL Server 6.5までvarcharの長さは255文字までに制限されていましたが、SQL Server 7.0以降ではvarcharの長さは8000文字まで使用できます。

1percent
質問者

お礼

ご回答ありがとうございます。 早速「SELECT LEN・・・」を試したところ256以上の数字(実際にINSERTしたデータ長)が表示されました(SQL Serverのバージョンは8.0)。 そこで社内の凄腕プログラマに相談して色々試したところ以下のような結果になりました。 ●SQL クエリ アナライザ ・・・ 256まで ●Borland SQL Explorer ・・・ 256以上(入力したデータ長) ●Access(ODBC経由)・・・ 256以上 ツール側の問題のようです。

その他の回答 (1)

  • zzen
  • ベストアンサー率23% (9/38)
回答No.1

varchar型は最大255バイトです。それ以上必要な場合は、image型かtext型を使用しますが、いろいろと制限もあります。 用途によりますが、大きなデータを管理する必要があるのであれば、ファイルパス名のみ格納し、実態はファイルをアクセスするなどの工夫も必要です。

1percent
質問者

補足

ご回答ありがとうございます。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_da-db_7msw.asp には「varcharは8000文字以内の可変長・・・」とあり日本語文字列を入れても3000~4000文字は入るのではないかと思ったのですが、意味が違うのでしょうか?それともこのリファレンスを参考にすることが全くの見当違いなのでしょうか? 再質問で申し訳ありませんが宜しくお願い致します。

関連するQ&A

  • SQLServer2000:テーブルの先頭に列を追加したい

    いつもお世話になっております SQLServer2000を使用しております。 あるテーブルに a,b,c,dという4つの項目が存在している状態で aの前にzというフィールドを追加したいと考えております。 Enterprise Managerを使えば簡単に行うことが出来ますが、 これをクエリアナライザで行いたい場合に どのようにSQL文を記述すればよいのか、見つけることが出来ませんでした。 このようなことは可能なのでしょうか。 ご存知の方がいらっしゃいましたら、ご教示のほど、何卒よろしくお願いいたします。

  • SQLServerで更新ができない。

    環境  Windows NT SQLServer 7.0 SQLServerのクエリアナライザ等で参照(select文)は成功するのですが、 更新(update文やinsert文)を実行すると以下のエラーが発生します。 解決方法がわかる方いましたら教えてください。 サーバー : メッセージ 6、レベル 16、状態 1、行 4 指定された SQL Server が見つかりません。

  • 文字が?に

    お世話になります。 VB.Net2003 Access2003 Windowsサーバー2003 SQLサーバー2000 という環境で開発を行っていますVB.Net初心者です。 実は特殊な漢字になると思うのですが例えば「侁」とか「暭」というような文字をAccess2003からやエンタープライズマネージャーでSQLサーバーに保存したときはなんら問題は無いのですがVB.Net2003で開発したプログラムでUPDATEをやINSERTを実行したとき「?」として保存されてしまいます。 何故なんでしょう?そしてよい解決方法があればご教授いただきたいのですが、よろしくお願いいたします。

  • 位置を指定してフィールドを追加する

    位置を指定して、フィールドを追加する方法をがわかりません。 ALTER TABLE [既存のテーブル名] ADD [新しいフィールド名] VARCHAR(100) AFTER [既存のフィールド名]; 上記のような方法でできませんでした。 ちなみにSQLServer2000がインストールされた環境で、クエリアナライザで実行しました。 よろしくお願いいたします。

  • varcharの文字数について

    MySQL5.0を2つの環境に構築をして、 それぞれPHPからDBアクセスをしています。 そのときにvarcharに登録できる文字数に違いがあり、 原因をしてもなぜ違いがでるか不明でした。 (1)同一マシン内に以下を構築 ・Windows2003Server(IIS) ・PHP5.2.12 ・MySQL5.0 (2)同一マシン内に以下を構築 ・WindowsXP(IIS) ・PHP4.4.2 ・MySQL5.0 があります。 varchar(100)に対して、超過するような文字500文字などを登録しようとすると、 (1)の環境では登録エラーとなり、DB登録できませんでした。 (2)の環境ではDBのサイズまで登録されて、超過分は破棄された状態で、DB登録がされていました。 MySQLの構築方法は同じですが、 呼び出し元のPHP(IIS?)による影響でしょうか?

  • SQLserverについて

    SQLの勉強を兼ねて、SQLserver を インストールして使ってみたいのですが、 特にサーバーなど立てずに、 スタンドアローンの環境で SQLserverをインストールして ローカルのACCESS のmdbに接続して SQL文など実行出来るのでしょうか? (Enterprise Manager は 使えるのでしょうか?) よろしくお願いします。

  • sqlで文字列を最後に追加したい

    SqlServer2000でクライアントはクエリアナライザを使っています。 例えばAccessのVBAでは adoRS!備考 = adoRS!備考.value & "追加する文字列" とすれば備考フィールドの最後に文字列を追加できますが、 これをsqlで行う場合にはどうればいいですか? update tblアンケート set 備考 = 備考 & '追加する文字列' としても「データ型の演算子が無効です。データ型演算子は boolean AND、データ型は varchar です。」エラーになってしまいます。 エラーの意味もわからず検索もしたのですが解決できませんでした。 宜しくお願い致します。

  • レプリケーションの結果確認

    こんにちは。 SQL Server2000を使用しています。 レプリケーション(パブリケーション、サブスクリプション)の 実行結果を簡単に確認するために模索しております。 Enterprise Managerを使用すれば見る事はできるのですが、 それをクエリアナライザやOSQLを使用して確認したく、 適切なSPコマンドやシステムテーブルを教えて頂けないでしょうか。 自分なりに調べてはみたのですが、適切なものが見つからなく、 どうぞよろしくお願い致します。

  • ファイルに書かれたSQLの実行方法(oracleとの違い)

    お世話になります。 SQLServer2000、クエリアナライザで質問があります。 ファイルに書かれた一連のSQLの実行したいとき、 ORACLEでは、SQL*PLUSから ファイル名の前に@をつけて実行できました。 また、SQLスクリプトの中で、別のSQLスクリプトを呼び出す場合は、@@を付ければできました。 このような事を、クエリアナライザから行いたい場合、どのようにすれば可能でしょうか? よろしくお願いします。

  • DATEADD 関数の引数の省略形の書き方

    SQL Server+SQL クエリアナライザ上で実行するSQLのスクリプトを書いていて、DATEADD 関数の書き方で困りました。 現在の日時から1ヶ月後を表示するには、 (1)  select DATEADD(Month, 1, GetDate()) でできますが、このときの日付要素の引数 Month には省略形が使えることになっています。 (2)  select DATEADD(mm, 1, GetDate()) (3)  select DATEADD(m, 1, GetDate()) で、このときに、ASPの癖で、ダブルクォートで囲って (4)  select DATEADD("m", 1, GetDate()) とやってしまったんんですが。 上記(4)の記述方法でも、開発環境では文法エラーにもならず、実行結果も期待した値が表示されました。 ところがそれを運用環境のSQL クエリアナライザで文法チェックしたら、 「パラメータ1はdateaddでは指定できません」 というメッセージがでてしまいました。 (1)の記述方法に変えたら、運用環境でも問題なく実行するようになったのですが、まったく納得いきません。 例えば実行させるクエリアナライザのバージョンによって、日付要素の引数の書き方が違うというような事があるのでしょうか? MSのサイトで検索しても見つからなかったのですが、捜しかたが悪いでしょうか。 同じようなことを他でもやってる可能性もあり、原因を特定させないととても怖いです。 開発環境は   SQL Server Standard Edition 7.00.1063   SQLクエリアナライザ Version SQL 8.00.760   OSは…確認しそびれました。 運用環境は  すぐには判らないのですが、SQL Server7.0ではあるでしょう。