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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

823閲覧

MySQLのテーブル作成について

meidochan

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2017/07/18 03:26

CREATE TABLE T_VendorShohin(
F_ShohinName nvarchar(30) not null primary key,
F_ShohinPrice int(7) unsigned not null,
F_JANCode int(13) unsigned unique not null,
F_ConTax double(3) unsigned not null default 1.08,
F_TaxRate double(4) unsigned not null,
F_TaxAmount int(3) unsigned not null
);
以上のような条件でテーブルを作成しようとしたところ、
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server versi
on for the right syntax to use near ') unsigned not null,
F_TaxRate double(4) unsigned not null,
F_TaxAmount int(3) u' at line 5
というエラーメッセージが返ってきました

エラーメッセージを検索したところ'をフィールド名に入れるのかなと思ったのですが、'を入れる場合と入れなくても実行できる時があるのはなぜでしょうか?
又、もし'以外で間違っているところがあればぜひご教授ください

以上よろしくお願いします

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

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

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

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

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

guest

回答2

0

MS SQLからのコンバートですか?
yambejpさんが言っているように、nvarcharという型はありませんので、varcharを利用します。

#####上記は嘘です。
nvarcharあります。NATIONAL VARCHARだそうです。あんまりっていうか、全然使ったことないですね。
テーブル定義をlaten等の文字コードにしておいて、そのフィールドだけは、utf8を使うっていう感じで、utf8を強制することができるみたいですね。
それにしても、テーブル・データベースの定義をutf8にしておけば、いちいち気にする必要なさそうです。


そして、全般的に言えることですが、INT型の後ろの桁数は意味がありません。
ZEROFILL(頭に0を埋める)ための桁数です。
その桁で限定されると勘違いしがちなので消しましょう。

例えば、こんなSQLを作ります。

SQL

1CREATE TABLE test001 ( 2 id SERIAL, 3 yesno BOOLEAN, 4 age INT(3) 5); 6```BOOLEAN`TINYINT(1)`のシノニムです。

mysql> desc test001;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| yesno | tinyint(1) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+---------------------+------+-----+---------+----------------+

そこに、 ```SQL INSERT INTO test001 (yesno,age) VALUES (100,10000); ```というSQLを投入すると`Query OK, 0 rows affected (0.06 sec)`と返って来ます。 成功します。 結果を見てみましょう。

mysql> SELECT * FROM test001;
+----+-------+-------+
| id | yesno | age |
+----+-------+-------+
| 1 | 100 | 10000 |
+----+-------+-------+
1 row in set (0.00 sec)

ですので、意味がありません。**(長っ!)**

投稿2017/07/18 05:32

編集2017/07/18 05:46
shi_ue

総合スコア4437

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

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

yambejp

2017/07/18 05:54

あ、MariaDBってnvarcharをサポートしてるんですね MySQLでは5.7でもサポートされてないようなので たんなるtypoかと思いました。フォローありがとうございます
meidochan

2017/07/18 06:16

皆さんお忙しい中ご返信いただきありがとうございます @shi_ueさん返信ありがとうございます int型の後ろの桁数は桁の限定だと思っていました。勉強になりました ちなむと三桁以上入れたくない場合などはどのように指定するのでしょうか?
yambejp

2017/07/18 06:22

> 三桁以上入れたくない場合 あまりそういう制限をテーブルに求めるのはどうかと思います。 3桁制限でたとえば1000を投入したとき、0になるかnullになるか 999になるか、定義がむずかしいですよね したがってその手のバリデートは投入時のSQL文で処理をしたほうが よいでしょう
meidochan

2017/07/18 06:31

なるほどdecimal型はそういう使い方ができるのですね すごく勉強になりました
shi_ue

2017/07/18 06:34

通常はyambejpさんが言っているように、投入前にプログラムでしっかり制限を掛けることをお勧めします。
guest

0

ベストアンサー

まずはtypo「nvarchar(30) 」→「varchar(30)」
またdoubleには長さ(引数)が指定できません

投稿2017/07/18 03:50

yambejp

総合スコア114784

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

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

meidochan

2017/07/18 05:31

@yambepj さん回答ありがとうございました 無事createすることができました 少しお伺いしたいのですが、nvarcharとvarcharの使い分けの判断基準がいまいちよくわからないのですが、yambepjさんはどう使い分けしているのでしょうか?
yambejp

2017/07/18 05:54

すみません、私はもっぱらMySQLしかつかっていないので nvarcharが最初から選択肢にありませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問