web-dev-qa-db-ja.com

エラーコード:1406。データが列に対して長すぎます-MySQL

エラーコード:1406。列に対してデータが長すぎます

CREATE  TABLE `TEST` 
(

  `idTEST` INT NOT NULL ,

  `TESTcol` VARCHAR(45) NULL ,

  PRIMARY KEY (`idTEST`) 
);

Insertいくつかの値

INSERT INTO TEST
VALUES
(
    1,
    'Vikas'
)

select 

SELECT * FROM TEST;

lengthを超えるレコードを挿入しています

INSERT INTO TEST
VALUES
(
    2,
    'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)

select the length

SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')

 '47'

そして、それはエラーメッセージを示しています

エラーコード:1406。列に対して長すぎるデータ

しかし、私の期待は、少なくとも最初の45文字をTableに挿入したいことです

質問が明確でない場合はお知らせください。

このエラーの原因はわかっています。データ型の長さを超える値を挿入しようとしています。

MS SQL。ですから、MySQLにもあることを願っています。

15
vikas

MySQLは、指定された列幅を超える挿入値を切り捨てます。

エラーなしでこれを行うには、SQL modeSTRICTを使用しない場合。

Mysqlリファレンスマニュアル


編集:

モードを変更するには

これは2つの方法で実行できます。

  1. my.ini(Windows)またはmy.cnf(Unix)MySQLインストールディレクトリ内のファイル。「sql-mode」というテキストを探します。

見つける:

コード:

# Set the SQL mode to strict 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

と置換する:

コード:

# Set the SQL mode to strict 
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

または

  1. PhpMyAdminなどのデータベース管理ツール内でSQLクエリを実行できます。

コード:

SET @@global.sql_mode= '';
59
echo_Me

アプリはユーザーが入力したデータを失い始める可能性があるため、STRICTモードをオフにすることは良い選択肢ではないと思います。

アプリからTESTcolの値を受け取った場合、Railsのようにモデル検証を追加できます

validates :TESTcol, length: { maximum: 45 }

SQLスクリプトで値を操作する場合、 [〜#〜] substring [〜#〜] コマンドで文字列を切り捨てることができます

INSERT INTO TEST
VALUES
(
    1,
    SUBSTRING('Vikas Kumar Gupta Kratika Shukla Kritika Shukla', 0, 45)
);
1
Hirurg103

これは、ubuntuで使用するステップです。入力から45文字以上を挿入できますが、MySQLはテキストを45文字にカットしてデータベースに挿入します。

  1. コマンドを実行

    Sudo nano /etc/mysql/my.cnf

  2. 次に、このコードを貼り付けます

    [mysqld] sql-mode = "NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION"

  3. mySQLを再起動します

    Sudoサービスmysqlの再起動。

0
Joe