初心者がphpMyadminでカラムの型について質問!

このQ&Aのポイント
  • phpMyadminのカラムの型設定に関して、初心者が疑問を持っています。具体的には、INT型の桁数設定や上限数値についての理解が不足しているようです。また、テーブル作成時の記述についても理解ができていないようです。
  • INT型の桁数設定が意図通りに機能しない現象について疑問があります。桁数を指定しても、指定した桁数を超えた値が格納されてしまうようです。また、INT型の上限数値についても理解が不足しているようです。
  • テーブル作成時のカラムの記述について、初心者が理解できていない点があります。NOT NULLとDEFAULTの設定に矛盾があるように感じるのですが、これは私の解釈が間違っているのでしょうか?
回答を見る
  • ベストアンサー

phpMyadmin カラムの型、他

始めたばかりの初心者です。 よろしくお願いします。 phpmyadminの事で質問があります。 ◇型の設定で、桁数を決める際にINTで(6)としても 試しに10桁を入れても(phpmyadminで直接) 入ってしまいます。試しにと思ってINTのところに ”あいうえお”を入れても入ってしまいます。 どういう事でしょうか? ◇またINTの上限数値って4294967295だとすると 桁数の設定は(10)までは意味があっても、(11)以上に しても意味がないのでしょうか? ◇INT(11)に上限数値の4294967295をいれると 何が起こるのですか? ◇最後にもうひとつ テーブル作成の際にphpmyadminの(sqlタブ)でつくるとき 以下のような記述をするとそのやり方を習ったのですが、  (サンプル)   Name` varchar(32) NOT NULL default '', この記述の意味がイマイチ理解しきれません。 NOT NULLとは、ヌル値は認めないというのに、 defaultは””(ヌル)で設定ができてしまう。って 矛盾してませんか?それとも私の解釈が間違っていますか? たくさん質問してしまいましたが、よろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>INTで(6)としても >試しに10桁を入れても(phpmyadminで直接) >入ってしまいます。 INTの桁数はUNSIGNED ZEROFILL属性をつけた際にゼロ埋めするための桁数です。 >試しにと思ってINTのところに >”あいうえお”を入れても入ってしまいます。 それはない、勘違いでしょう。 >桁数の設定は(10)までは意味があっても、(11)以上に >しても意味がないのでしょうか? 前述の通り有効桁数ではなく表記上の桁数なので、 よほど特殊な使い方を想定していなければ気にする必要はありません。 >INT(11)に上限数値の4294967295をいれると >何が起こるのですか? 普通に入力される以外なにもおきません。 そういうのはご自身でためしてみるが一番です ◇最後にもうひとつ >Name` varchar(32) NOT NULL default '', >NOT NULLとは、ヌル値は認めないというのに、 >defaultは””(ヌル)で設定ができてしまう。って >矛盾してませんか?それとも私の解釈が間違っていますか? 基本を理解していないようで、完全に間違っていますね。 実際「」とNULLは排他的な関係ではなく必要に応じて共存できます。 具体的にはNULL指定すると「空ですよ」いう情報が入ります。「」は文字の長さが0の文字情報が入ります。 LENGTHで長さを拾う時LENGTH(NULL)はNULLを返しLENGHT('')は0を返します。 カウントを取る時に、「」はカウントの対象となりますがNULLはカウントの対象外です。 たとえばあるテーブルのXというカラムに10個のデータが保持されているとき NULLのレコードが3件あれば、SELECT COUTN(X) FROM テーブルすると 7件しかレコードが拾えません。 また、NULLへのアクセスはIS NULLなどで評価を行うなど NULLというのは特徴のある属性ですので、きちんと理解を深める 必要があります。

hayaken73
質問者

お礼

NULLについてはそれなりに今まで調べてきましたが、 今回のご説明とあげていただいた例で理解が ほぼ完全になったように思えます。 また桁数の考え方もようやく分かりました。 ご親切にお答えいただきありがとうございました。

関連するQ&A

  • phpMyAdminのSQLで、SQL文を登録が

     phpMyAdminのSQLで SQL文を登録するため、以下のエラーメッセージの中にあるCREATE DATABASE xmas;で始まる  SQL文を実行したところ、以下のエラーメッセージがでて、登録でできずに困っています。  どうしたら登録できますか!?    宜しくお願いします。    エラー 実行した SQL: CREATE DATABASE xmas; MySQL のメッセージ: ドキュメント #1007 - Can't create database 'xmas'; database exists サーバ "127.0.0.1" 上でクエリを実行する: ドキュメント CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default '' , org varchar(50) not null default '', addr varchar(80) not null default'', tel verchar(20 default '', mail varchar(40) default '', course varchar(30) default '', nums integer default 0, PRIMARY KEP (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    • ベストアンサー
    • MySQL
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • SQL文を入力したらエラー

     phpMyAdminでSQLに  以下の文を入力しました。  CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;  以上SQLに入力した文ですが!  以下のエラーが出て先に進みません。   エラー 実行した SQL: CREATE DATABASE xmas; → (http://dev.mysql.com/doc/refman/5.5/en/create-database.htmlにリンクされている) MySQL のメッセージ: ドキュメント #1007 - Can't create database 'xmas'; database exists サーバ "127.0.0.1" 上でクエリを実行する: CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   以上ですが、何が原因で進めないか原因を追及中です。  最近SQLを始めたので、全く見当がつきません。 皆様よろしくお願いします。  

    • ベストアンサー
    • MySQL
  • usersテーブルの構成カラムについて

    MySQLバージョン4.1.16を使用しています。 このジャンルでお願いします。 よく全ての基本となるusersテーブル(IDとパスワードを入れるユーザの基本テーブル) があると思うのですが、それを構成するカラムはどのような感じにするのが良いのでしょうか? 自分は、 CREATE TABLE `users` ( `user_id` varchar(16), `password` varchar(255) default NULL, `col1` varchar(255) NOT NULL, `col2` varchar(255) NOT NULL, PRIMARY KEY (`user_id`), ) ENGINE=InnoDB; このように代替キー(連番)を使わずにuser_idを主キー(unique)にして構成します。 理由としては、uniqueな列があるなら、わざわざ連番を割り当てる必要もないし、 他のテーブルがuser_idを外部キーとして持った時に、その表の外部キーの列が 数字であるよりも見やすいかなと思ったからです。 ただ一般的に出まわっているPHPフレームワークなどのテーブル構成ではusersテーブルというか ほとんどのテーブルに連番を使っている例があります。 次のusersテーブルは、PHPフレームワークのCakePHPで使われるusersテーブルの構成の例で、 連番を使用しています。 CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) collate utf8_unicode_ci default NULL, `password` varchar(255) collate utf8_unicode_ci default NULL, `group_id` int(11) NOT NULL, `disabled` tinyint(1) NOT NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`), KEY `group_id` (`group_id`), KEY `disabled` (`disabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 使用状況によって、どちらが良い悪いというのは変わるのでしょうけど 基本的にusersテーブルというのはどのような構成にすべきなのでしょうか? ちなみに自分は連番は○○_seqというカラム名にしてます(ただこれも 一般的には○○idを連番にしてるケースが多いので、どうすべきか迷っています・・・)

    • ベストアンサー
    • MySQL
  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • joomlaのインストールについて

    joomlaのインストールでmysqlのデータベース情報を入力し次へを押すと下記のメッセージがでます。 (インストール画面では無く、白いページに文字だけが表示されています) 接続は出来ていると思うのですが、どうしたらインストールを続けることが出来るのでしょうか? 【環境】 FreeBSD7 php5 mysql6 【メッセージ】 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 29 SQL=CREATE TABLE `jos_banner` ( `bid` int(11) NOT NULL auto_increment, `cid` int(11) NOT NULL default '0', `type` varchar(90) NOT NULL default 'banner', `name` TEXT NOT NULL default '', `alias` varchar(255) NOT NULL default '', `imptotal` int(11) NOT NULL default '0', `impmade` int(11) NOT NULL default '0', `clicks` int(11) NOT NULL default '0', `imageurl` varchar(100) NOT NULL default '', `clickurl` varchar(200) NOT NULL default '', `date` datetime default NULL, `showBanner` tinyint(1) NOT NULL default '0', `checked_out` tinyint(1) NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `editor` varchar(150) default NULL, `custombannercode` text, `catid` INTEGER UNSIGNED NOT NULL DEFAULT 0, `description` TEXT NOT NULL DEFAULT '', `sticky` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, `ordering` INTEGER NOT NULL DEFAULT 0, `publish_up` datetime NOT NULL default '0000-00-00 00:00:00', `publish_down` datetime NOT NULL default '0000-00-00 00:00:00', `tags` TEXT NOT NULL DEFAULT '', `params` TEXT NOT NULL DEFAULT '', PRIMARY KEY (`bid`), KEY `viewbanner` (`showBanner`), INDEX `idx_banner_catid`(`catid`) ) TYPE=MyISAM

    • 締切済み
    • PHP
  • SQLにプログラムが反映されないのは何故

    XAMPP Version: 1.8.2 です。   Xamsのデータベースをデータベースから削除した後  SQLから、以下2個プログラムを入力しました。  すると、削除したにも関わらず、エラーが出て プログラムが反映されません。  Xamsを削除後、再起動したらまたXamsのデータベースが 再構築されます。  私は作成した記憶はありません。  すでに存在しているので、作成しする必要は ないのか、よくわかりません!?  皆様どう思われますか!?  以下入力したプログラムです。 ---------------------------------------------------------------- CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default '' , org varchar(50) not null default '', addr varchar(80) not null default'', tel varchar(20) default '', mail varchar(40) default '', course varchar(30) default '', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; エラー 実行したSQL: DATABASEクリスマスを作成します。 のMySQLのメッセージ:ドキュメント #1007 - データベース'クリスマス'を作成できません、データベースが存在している -------------------------------------------------- CREATE DATABASE if not exists xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default '' , org varchar(50) not null default '', addr varchar(80) not null default'', tel varchar(20) default '', mail varchar(40) default '', course varchar(30) default '', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; エラー 実行したSQL: TABLE xmastranを(CREATE book_idのINT NOT NULL AUTO_INCREMENT、 名VARCHAR(30)NOT NULL DEFAULT''を、 orgのVARCHAR(50)NOT NULL DEFAULT''を、 addrはVARCHAR(80)NOT NULL DEFAULT''を、 電話VARCHAR(20)DEFAULT''を、 メールVARCHAR(40)DEFAULT''を、 もちろんVARCHAR(30)DEFAULT''を、 numsはINTEGERのデフォルトは0、 PRIMARY KEY(book_id) )ENGINE = MYISAM DEFAULT CHARSET= utf8を; のMySQLのメッセージ:ドキュメント #1050 - テーブル 'xmastran'は既に存在します。 ------------------------------------------------------------------- 以上よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文でダブルクォートか

    SQL文でダブルクォートかアポストロフィーか迷っています!?  以下のSQL文の  name varchar(30) not null default " ,等の  最後から2番目に " ダブルクォートがあります。  教本を見ながら入力したのですが、' ' アポストロフィーが2個あるようにも見えます。 この場合、どちらが正規でしょうか!    以下問題のSQL文です。  よろしくお願いします。 CREATE DATABASE xmas; USE xmas; book_id int not null auto_increment, name varchar(30) not null default " , org varchar(50) not null default ", addr varchar(80) not null default", tel varchar(20) default ", mail varchar(40) default ", course varchar(30) default ", nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    • ベストアンサー
    • MySQL
  • niftyのラクーカンでのphpMyadminでのエラー

    mysqlを使う初心者です。 NIFTYのラクーカンというサービスでphpMyAdminを使用してopen PNEを稼動させようと思っています。 一度自分で借りたNIFTYのラクーカンでphpmyadminを稼動させ、上手くいきました。 今度は仕事上で同じくラクーカンでサーバーを借り、同じように設定をして、URLやサーバー名を改めて設定し通常通り起動出来たのですが、データベースのテーブル?をインポートさせようとするとエラーが出てしまいます。そのときのメッセージは以下の通りです。 ーーーーーーーーーーーーーーーーーーーーーーーーーー エラー 実行した SQL: CREATE TABLE `biz_admin_config` ( `biz_admin_config_id` int( 11 ) NOT NULL AUTO_INCREMENT , `name` text NOT NULL , `value` text NOT NULL , PRIMARY KEY ( `biz_admin_config_id` ) ) TYPE = MYISAM ; MySQLのメッセージ: #1046 - No Database Selected ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー このようなメッセージが出る原因がなにかを知りたいのですが素人の私にはどうも良く分かりません。同じバージョン、同じ設定でやっているつもりなのですが・・・。 MySQL - 4.0.27-standard-log phpMyAdmin - 2.8.2.4 phpMyAdminのlibraliesフォルダにconfig.default.phpをアップして最初の画面までは出るのですが、何回確認しても以前の設定と同じようにしているのですが。 ぜひ、何か理由の分かるかた、ご教授お願いします。

    • ベストアンサー
    • MySQL
  • MySQLで項目の反復定義(COBOLでいうところのOCCURS)はあ

    MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか? 今は AAA1 varchar(10) not null BBB1 int(6) not null CCC1 int(2) not null AAA2 varchar(10) not null BBB2 int(6) not null CCC2 int(2) not null  :  : AAA30 varchar(10) not null BBB30 int(6) not null CCC30 int(2) not null みたいに書いています。 XXX OCCURS 30 AAA varchar(10) not null BBB int(6) not null CCC int(2) not null のような書き方があればと思ったのですが。。 ご存知の方いらっしゃいましたら、 また他に良い方法をご存知の方いらっしゃいましたら ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL