エラーコード: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にもあることを願っています。
MySQLは、指定された列幅を超える挿入値を切り捨てます。
エラーなしでこれを行うには、SQL mode
STRICT
を使用しない場合。
モードを変更するには
これは2つの方法で実行できます。
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"
または
コード:
SET @@global.sql_mode= '';
アプリはユーザーが入力したデータを失い始める可能性があるため、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)
);
これは、ubuntuで使用するステップです。入力から45文字以上を挿入できますが、MySQLはテキストを45文字にカットしてデータベースに挿入します。
コマンドを実行
Sudo nano /etc/mysql/my.cnf
次に、このコードを貼り付けます
[mysqld] sql-mode = "NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION"
mySQLを再起動します
Sudoサービスmysqlの再起動。