前提・実現したいこと
データベースで「日本語でも英語でも5文字まで」という投稿機能を実装したく思い、該当のソースコードにあるようなVARCHAR(5)
を指定しました。
そこでMySQL側でVARCHARの指定を超えたらエラーになる機能を実装したいです。
発生している問題
以下リンクによれば、文字数を超えたら「> エラーになるのがSQL標準」とのこと。しかし実際にはINSETできてしまい、エラーになりません。
文字数制限のあるVARCHARへのINSERT/UPDATEをエラーでなく切り詰めに
該当のソースコード
問題(エラーにならないこと)が生じるCREATE、INSERTです。
SQL
1CREATE TABLE IF NOT EXISTS my_test ( 2 ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT 3 ,name VARCHAR(5) # 5文字までに制限 4 ,PRIMARY KEY (ID) 5); 6 7INSERT INTO my_test (name) VALUES ('あいうえおか'); # 5文字を超えたINSERTを実行
上記INSERTの結果がこちらの画像で、あいうえおか
のうちあいうえお
がINSERTされてしまい、特にエラーが生じません。
試したこと
PHPで以下の検証を挟みました。mb_strlen
を用いて、5文字を超えたnameのINSERTを防ぐ意図です。
PHP
1$name = filter_input( INPUT_POST, 'name' ); 2if ( mb_strlen( $name ) > 5 ) { 3 $result = ['status' => 'error', 'mes' => 'nameは5文字までです' ]; 4 echo( json_encode( $result ) ); 5} else { 6 $sql = "INSERT INTO my_test (name) values (%s);"; // 5文字を超えたnameのINSERTを防ぐ 7 /* 以下略 */
しかしMySQL側での制限が出来た方が安心に感じます。
どうしたらエラーが出るようになりますでしょうか?
補足情報(FW/ツールのバージョンなど)
MySQL は 5.7 を使用しています。
宜しくお願い致します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/07 08:45
2022/02/07 09:19 編集
2022/02/07 11:36