• ベストアンサー

SQL Serverでの文字列の格納

SQL Serverで日本語の文字列を格納する型について質問させてください。 日本語文字列の格納にはnvarcharとntext型がありますが、全部 ntext型にしてもよいものでしょうか? 全部ntext型にした場合、何か都合の悪いことがあるのでしょうか?

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

  • ベストアンサー
回答No.1

長さの上限は、予め分からないのですか? インデクスの定義可否、ソートやグループ化で使用できないなど、text型にするといろいろな制約が出てきます。

nihon_no_samurai
質問者

お礼

ありがとうございます!

関連するQ&A

  • SQL Serverのntext型で一意インデックスが作れないのは?

    SQL Serverのntext型で一意インデックスが作れないのはなぜでしょうか? nvarcharでは一意インデックスが作成できました。 よろしくお願いします。

  • mysqlで長さ無制限の文字列を格納することはできますか?

    mysqlを用いて掲示板を作りたいです。その際に、簡素化のため、掲示板の全てのデータをmysqlに格納したいと思っています。 また、掲示板における本文の部分は、文字列の長さを無制限にするのが妥当だと思います。 しかし、mysqlのマニュアル(http://dev.mysql.com/doc/mysql/ja/BLOB.html)によると、一番大きい型であるLONGBLOB型の記憶容量は 2^32バイトとなっており、それを超える文字列は切り捨てられるとなっています。 そこで、ご教授いただきたいです。 長さ無制限の文字列をmysqlに格納する方法はありますか?そしてその場合はどうすればよいですか? それとも、長さ無制限の文字列をmysqlに格納する方法ははなく、その場合は別ファイルを用意し、そちらに書き込むなどをする必要がありますか? どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLサーバーの文字化け

    Windows Serverでの文字化けについて教えてください。 会社である日本製の経理パッケージソフトを購入しました。英語OSはサポートしていないという事でしたが、弊社は外資系で日本語OSはインストールできないという事で、テストサーバーを立ててインストールしました。 環境としては・・・ ・Windows Server 2016英語版 ・日本語言語パック ・SQL Server 2016英語語版(照合順序 Japanese_CI_AS) アプリケーションはVisual Basic C++で書かれているそうです。Webアプリケーションではありません。 テストサーバーでは言語パックをインストールしてコントロールパネルの言語と地域を日本語に設定しました。 最初文字化けしたのですが、インターネットで記事を見つけたので以下の操作を行ったら文字化けが解消しました。 コントロールパネルの形式とシステムロケールを一旦英語にする→再起動→日本語にする→再起動 そこで、同じ環境で本稼動サーバーを構築しました。テストサーバーも本稼動サーバーも新しくVM環境でOSからインストールし、SQL Serverをインストールしました。これらのサーバーはこのアプリケーション専用で、他のアプリケーション等はインストールしていません。 ところが、同じ環境なのに、何をしてもアプリケーション上でSQL Serverから取得した文字列が全て???と文字化けしてしまいます。 テストサーバーの設定手順はメモしておいたので、同じ手順です。再起動も何十回もしました。一旦英語OSに戻して再起動、日本語に戻すなどもやってみました。 パッケージソフトなのでソースやデーターベースの変更はしてもらえません。ソフトの再インストールやデーターベースの再インポートはしてもらいました。文字化けするのはSQLサーバーのchar型です。 SSMSの設定も確認しました。SSMS上では文字化けしません。データーベース、テーブル、カラムの照合順序の確認しましたが、テストサーバーと同じようにJapanese_CI_ASに設定されています。 ODBC経由でosqlでSELECTするとも文字化けしません。また、ODBC経由でAccessからリンクしても文字化けしません。 本稼動サーバーではアプリケーション上で何をやっても文字化けしてしまいます。 また本稼動上のアプリケーション上で、旧SQL Server 2008に接続すると文字化けしません。 文字化けするのは新本稼動サーバーのアプリケーション上でDBから取得している全ての表示です(プルダウンリスト、表示など)。新規にデーターを追加しても???で文字化けします。 Windows 2008やSQL Server2008のEnd of Supportが近づいており、パッケージソフトも購入してしまったので非常に困っています。 テストサーバーでは文字化けしないのに、何故同じ環境で構築した本稼動サーバーでは文字化けするのでしょうか? 文字化けについて経験がある方がいましたら、教えてください。

  • SQL Server2000 と 2005 

    AccessとSQL Server(MSDE2000)で業務システムを作っています。 データを入力するフォーム(入力票)上でLotNoを入力すると該当する単価をビュー原料マスタから取得するようにしています。 LotNo(フォームのテキストボックス)の更新処理後のイベントに・・・ Me![単価] = Dlookup("単価","原料マスタ","LotNo = " & [Forms]![入力票]) としています。MSDE2000の場合は正しい値が取得できますが、SQL Server2005の場合は以下のエラーが出ます。 実行時エラー245  nvarcharの値 '.' をデータ型intに変換できませんでした。 ビュー「原料マスタ」の基になるテーブルの各項目は、 LotNo:nvarchar(13桁) 単価:float です。 どのようにするればよいでしょうか? 型を変換するような処理が必要なのでしょうか? 以上、よろしくお願いします。

  • SQL SERVER 2005 にて全テーブルの文字列を置換する方法を

    SQL SERVER 2005 にて全テーブルの文字列を置換する方法を探しています。 ものすごく基礎的なことでしたら申し訳ございません。 SQL SERVER 2005で作成したDBがあるのですが、この中の全てのテーブル内を検索し、 「AAA」という文字列を「BBB」に置換したいと考えています。 上記は例えですが、とにかく全てのテーブル内の全ての文字列を検索し、置換できる方法は無いでしょうか。 どうかご教示のほど、よろしくお願いいたします。

  • SQL Server において

     いつも大変お世話になっています。  早速質問させていただきます。  SQL SERVER で、数値演算を行いたいのですが、 どれが演算子になっているのかがよく分かりません(- -; 「+」だと文字列演算になってしまい、ならば、数値型に変換してからやればいいのだ!!とおもい、TO_NUMBER関数を使ったところ関数とは認識されませんでした(T T)。 一体どうすればいいのでしょうか?お願いします。教えていただきたいです。 Oracleの関数が使えない場合があるので、SQL SERVER で使用できる関数が載っているサイトなどがあったら教えていただきたいです。

  • SQL Server2008 Express の文字列検索について

    SQL Server2008 Express の文字列検索について 検索対象のフィールド内にスペースが入っている場合に  スペースを無視して検索をすることができるでしょうか? 例 検索文字列 山田太郎 検索対象 山田 太郎 or 山田太郎 上記2つのフィールド値を含むレコードが両方表示されるような方法はありますでしょうか。

  • SQLServer2008での1レコードバイト数の上限を増やしたい

    こんにちは、いつも参考にさせていただいております。 通常1レコードのバイト数の上限は8060ですが、 それがSQLServer2008あたりから緩和されたと聞きました。 そこでマイクロソフトのTechNetを見ましたがよくわかりませんでした。 2つわからない点がありますのでご教授どうかお願いいたします。 ◆疑問点(1)◆ ↓で8060バイト上限が緩和できそうだと思った中での疑問です。 マイクロソフトのTechNet 「8 KB を超える場合の行オーバーフロー データ」 http://msdn.microsoft.com/ja-jp/library/ms186981.aspx 「これら(varchar 型、nvarchar 型、varbinary 型、sql_variant 型、またはCLR ユーザー定義型)の列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの制限を超えることができます。」 わからないのは、上記文章中にある「組み合わせた場合」というポイントです。 ○varchar 型とnvarchar 型、varbinary 型とsql_variant 型というように違う種類を組み合わせなければ8060バイト制限が越えられないのでしょうか? ◆疑問点(2)◆ 「8 KB を超える場合の行オーバーフロー データ」ページ内でntext型などについての注意書きがありました(下記)。 それについての疑問です。 「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」 ○ntext型とvarchar 型等との組み合わせの場合、8060バイト制限は関係ないのでしょうか?  (というよりntext型などは8060バイトレコード上限が関係ない?) 「text 型データと image 型データの使用」 http://msdn.microsoft.com/ja-jp/library/ms189574.aspx どうかご教授・ヒントなどいただけないでしょうか。 よろしくお願いいたします。 補足など必要でしたらコメントください。

  • 異なるSQL Server をインストールすると

    お世話になります。 SQL Server 2005 SQL Server 2008 両方のデータを見たいのですが、1台のサーバーに両方のSQL Server をインストールした際に、 クライアントからの接続文字列というのはどのようになるのでしょうか? 同じサーバーですし、インスタンス作る云々という記事を見たのですが、実際どのようにすればいいのか、どのように接続文字列を作成するのかがわかりません。 簡単でかまいませんので、この辺りをご説明していただけますよう、 よろしくお願い申し上げます。

  • 文字列が格納されているポインタからの取出し

    1.DumpDatというポインタに、テキストファイルから読み出した文字列(=aabb)を格納します。 2.cPtr=pDoc->GetDumpData(); にて、DumpDatのアドレスを取得し、cPtrに格納します。 3.wsprintf(cData,"%02X",*cPtr);にて、文字列を取り出し16進表記表示で、cDataに格納します。 4.TextOut(表示する文字数,文字の高さ,cData)で、cDataを表示します。 このとき、 1の時:DumpDatにファイルから読み出したデータは「(aabb)が入っていると考えています。 2の時:cPtrには、アドレスが格納されていると考えています。 3の時:cDataには、(61,61,62,62)が入ると考えています。 4の時:(61 61 62 62)が表示されると考えています。 <結果> 考えた内容と結果が異なりましたので、トレースしてみたところ、  ・3の時に、「cData」には、(61)のaの一文字しか格納されていませんでした。  ・結果、4の時に表示される文字は、61の1文字分でした。 3の段階で、全文字を取り出すのではなく、1文字文(61)しか取り出さないのはなぜなのでしょうか? ⇒(61 61 62 62)が抜けませんでした。 <質問> ポインタから文字列を取り出す際は、1文字しか取り出さないのでしょうか? ご教授よろしくお願いします。