質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

3回答

7676閲覧

SQL ServerでのNULL終端文字

y-haga

総合スコア23

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2015/11/27 13:49

NULL終端文字について、質問があります。

現在SQLServerでサイトを運用しています。
その中でメールアドレスを登録しているのですが、ごくたまにメールアドレス内に
NULL文字が入っている場合があります。

これがシステム上読み込めない、といってエラーとなっています。

なんとかエラーを回避したいのですが、
①登録時に除外
②データ検索時に除外
の、どちらかができるものなのでしょうか?

ちなみに今は発見した際に、同じアドレスで直接UPDATEして、修正しています。

ご存知の方、教えていただけませんでしょうか。


環境:
Sql Server 2008 R2
ASP.NET 2005

対象のカラム:
char(60)の空白埋め
※ただし、エラーとなるデータは空白埋めされません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ご連絡が遅れて申し訳ありません。
ご回答くださった方々、ありがとうございました。

なんとか検出する方法がありましたので、自己解決ということで記載します。
※解決したわけではありませんが、少なくともデータから対象の方を検出することはできました。

不正文字を含む検索
SELECT STUFF(UPPER(master.dbo.fn_varbintohexstr(CAST(項目名 AS BINARY(60)))), 2,1,'x') LIKE '%0000%'
FROM TESTTABLE

このようにバイナリ変換で0000を含むデータを検索で対象の方はわかりました。
あとはシステム内でもバイナリでの変換ができれば対応したいと思います。

投稿2015/12/07 12:28

y-haga

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

理由の検討がまだついてませんが、DBに不正な文字列が登録されてしまうのであれば登録時に除外するべきでしょう。
どの時点で不正な文字列が設定されてしまっているのか遡ってください。

  • ASP.NETからSQLサーバーへクエリを投げる際に含まれるのでしょうか。
  • アプリケーションを介さずにそのクエリを直接実行した場合は同じように不正なデータで登録されてしまいますか。

また、「ごくたまに」についてもパターン分析を行い、条件を明確にされたほうが良いでしょう。
決まったパターンであれば100%発生するのか、しないのか。再現性も検証してください。

投稿2015/11/29 09:05

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y-haga

2015/11/29 09:24

ご回答ありがとうございます。 自分で試した限りでは、登録時には発生しません。 ただし、このサイトは空メールから登録する機能があり、送信されたメールのヘッダ情報からメールアドレスを登録しています。 (もちろんそれ以外の登録もあります。) 今エラーが起きているのは、この空メール系の登録から起きているというまでは、わかっているのですが、それがどのような場合に起きるのかがわかっていません。 機種依存なのか、メールを送っているサーバなのか。 ただ再現が取れないのであれば仰るとおり上記の登録時にできる限り除外するように設定してみるのが早いかもしれないです。どういった文字なのかがわかりませんが、まずは対応し、件数が減るかを確認してみます。
guest

0

一般的にNullを弾く場合、以下となります。

登録時に除外

データベースの設定で、Null禁止
※ただし、Null禁止にすると、登録時に除外設定していないと、当然DBエラーとなります。

>データ検索時に除外

Null=何も存在しないデータ
を許可するか、しないかは、そのシステムの仕様によるので、どちらが正しいとかはないです。

つまり、登録時に、メールアドレスが記述してなくてもOKなのか、ダメなのかによって、システムの仕様が変わって来てしまうので、どちらにしたいですか?というのが回答となります。

ーーーーーーーーーーーーーーーーー
メールアドレス内?
もしかして、NULLではなく、空白文字の事でしょうか?
NULLは、本当に何もない状態(nothing状態)を指し、
空白は、space文字列を指します。

もし、空白文字列であれば、
登録時に空白除去関数で除去してあげればよいでしょうし、
念には念をという事あれば、SQLのINSERT文に差し込む変数に対して空白除去してあげればよいですよ。

投稿2015/11/28 14:27

編集2015/11/28 15:14
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y-haga

2015/11/29 08:56

ご回答ありがとうございます。 説明がわかりづらく申し訳ありません。 NULL許可や空白埋めの話ではなく、メールアドレスの最後に不正な文字 (改行コードかNULL終端文字列か)が含まれていることがあります。 これが入っているとデータの見た目上は、問題ありませんがシステムを通したときに エラーとなる場合があります。 これを検索時か登録時に除去したいと考えていますが、その手法がわからず対応できていないです。 ちなみにエラーの出るデータをSQL ServerからCSV出力し、エディタに張り付けると 「NULL文字を空白に変換して読み込みました。」と表示されます。
退会済みユーザー

退会済みユーザー

2015/11/30 15:26

そういう事だったんですね。 業界あるあるですね。 それであれば、まずはエラーデータに文字コード変換をかけて、きちんと文字コードを探る事をお勧めします。 Oracleの改行コード問題は有名なのですが、SQLServerだとあまり聞かないですね。 エラーになる文字コードが分かれば、あとは、切り分けですね。 まずは、サイトからASP.NETに渡している時点でなっているかどうかを、その文字コードで引っかけて確認し、そこで文字コードが入っているのであれば、当然、そこで弾くべきです。 そもそも、SQL Serverに、変な文字コードを入れてしまう(入ってしまう)のは設計上良くないと思います。 Web系のシステムという事で、色んなプラットフォームから入力されるという前提条件があるのであれば、どんな文字コードが入ってくるか分からないので、ご質問の様な事は、起こり得るとは思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問