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

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

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

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

MariaDB

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

Q&A

解決済

2回答

534閲覧

【MariaDB】insertについて質問です。

tokyo2020

総合スコア28

MySQL

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

MariaDB

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

0グッド

0クリップ

投稿2019/12/03 05:31

mariaDBを操作してるときに違和感を感じたので質問します。
テーブル定義の段階でintを指定したカラムに文字列を入れてもエラーにならないのでしょうか。
またvarchar(10)などで11文字以上入れると、これもエラーにならず10文字で切り捨てられてしまいます。

sql

1MariaDB [db]> create table test(id int(11) primary key); 2 3Query OK, 0 rows affected (0.04 sec) 4 5MariaDB [employee_db]> show columns from test; 6+-------+---------+------+-----+---------+-------+ 7| Field | Type | Null | Key | Default | Extra | 8+-------+---------+------+-----+---------+-------+ 9| id | int(11) | YES | | NULL | | 10+-------+---------+------+-----+---------+-------+ 111 row in set (0.03 sec) 12 13MariaDB [db]> insert into test(id) values("ああああああああ"); 14Query OK, 1 row affected, 1 warning (0.01 sec) 15 16MariaDB [db]> select * from test\G 17*************************** 1. row *************************** 18id: 0 191 row in set (0.00 sec)

この場合、エラーは発生しないのでしょうか。
わかる方回答お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

この場合、エラーは発生しないのでしょうか。

MariaDB(やMySQL)には、SQL_MODEという概念があります(MariaDB公式)。

  • SQL_MODESTRICT_TRANS_TABLESSTRICT_ALL_TABLESの場合…不適当な値のINSERTには失敗し、ロールバックされます。
  • SQL_MODEが別な設定の場合…不適当な値は、MariaDB側で変換が入って、適当な値としてINSERTされることがあります。

投稿2019/12/03 05:37

maisumakun

総合スコア145183

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

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

tokyo2020

2019/12/03 05:42

なるほど! 調べたらSQL_MODEがNO_ENGINE_SUBSTITUTIONでした。 これが原因でエラーにならずにinsertできてしまうんですね。。。 すっきりしました。ありがとうございます。
guest

0

MariaDBも、その元のMySQLもテーブルに入るデータのチェックをゆるくしたり、エラーにしないで無視することでパフォーマンスを落ちないようにしているところがあります。
その分、MariaDBはプログラムを書く人の能力でカバーします。銀行のようなシビアな要求されるシステムではきちんとチェックするOracleが使われることが多いです。

投稿2019/12/03 05:42

Orlofsky

総合スコア16415

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

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

tokyo2020

2019/12/03 05:49

回答ありがとうございます。 たしかに、重要なデータを扱うときにこんな緩いチェックだったら危ないですね^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問