오류 코드: 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
그length
SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')
'47'
그리고 오류 메시지를 보여주고 있습니다.
오류 코드: 1406.데이터가 너무 길어서 열에 사용할 수 없습니다.
하지만 저의 기대는 표에 처음 45자 이상을 삽입하고 싶습니다.
질문이 명확하지 않다면 저에게 알려주시기 바랍니다.
저는 이 오류의 원인을 알고 있습니다.저는 데이터 타입의 길이 이상의 값을 삽입하려고 합니다.
MySQL에서 .MS SQL
. 그래서 MySQL에도 있었으면 좋겠습니다.
MySQL은 지정한 열 너비를 초과하는 삽입 값을 잘라냅니다.
이것을 실수 없이 만들려면 당신의 것을 바꾸세요.SQL mode
사용하지 않는STRICT
.
편집:
모드를 변경하려면 다음과 같이 하십시오.
이 작업은 두 가지 방법으로 수행할 수 있습니다.
- 를 .
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"
아니면
- 데이터베이스 관리 도구(예: phpMyAdmin) 내에서 SQL 조회를 실행할 수 있습니다.
코드:
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)
);
최근에 저한테 이런 일이 있었어요.MySQL 5.7로 완전히 마이그레이션되었으며 모든 것이 기본 구성으로 되어 있습니다.
이전의 모든 답변은 이미 명확하며, 저는 그저 무언가를 추가하고 싶습니다.
이 1406 오류는 테이블의 열 길이뿐만 아니라 기능/절차에서도 발생할 수 있습니다.
저의 경우 IN 파라미터 varchar(16)로 어떤 통화 절차를 트리거했지만 32 length 값을 받았습니다.
이것이 비슷한 문제를 가진 사람에게 도움이 되었으면 좋겠습니다.
위에 제시된 답변 외에, 저는 단지 이 오류가 행이 잘못된 종료 문자를 가진 데이터를 가져오는 과정에서 발생할 수도 있다는 것을 덧붙이고 싶습니다.
예를 들어 윈도우에 덤프 파일을 csv 형식으로 저장합니다.그런 다음 가져오기 중에
LOAD DATA INFILE '/path_to_csv_folder/db.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Windows에서 \n을 사용할 때 줄 끝을 \r\n(즉, CFLF)으로 저장했습니다.pphMyAdmin은 파일을 가져올 수 없는데 왜 파일을 가져올 수 있었는지 정말 미칠 지경이었습니다.메모장++에서 파일을 열고 파일의 끝을 보았을 때 비로소 mysql이 종료된 어떤 줄도 찾을 수 없다는 것을 깨달았습니다(그리고 모든 줄을 필드의 입력으로 간주하여 불만을 일으키는 것 같습니다).
어쨌든 \n에서 \r\n로 만든 후에는 매력적으로 작용합니다.
LOAD DATA INFILE '/path_to_csv_folder/db.csv' INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
이것은 제가 우분투와 함께 사용하는 단계입니다.입력한 문자를 45자 이상 삽입할 수 있지만 MySQL은 데이터베이스에 삽입하기 위해 텍스트를 45자로 잘라냅니다.
실행명령
sudo nano /etc/my/my.cnf
그런 다음 이 코드를 붙여넣습니다.
[mysqld] sql-mode="NO_AUTO_CREATE_USER, NO_ENGINE_Substitution"
MySQL 재시작
sudo service mysql restart;
이 질문은 검색 결과에 우선순위를 두고 있으므로 substr()을 사용하여 저장하기 전에 데이터를 미리 잘라낼 수 있다고 빠르게 말하고, 오류 코드: 1406으로 이어지는 대용량 데이터 저장의 더 심각한 문제로 넘어가겠습니다. 데이터가 너무 길어서 열이 없습니다.
저는 엄격한 모드를 끄라고 조언하는 모든 답변과 의견에 동의하지 않습니다.저장이 필요한 데이터는 저장해야 하고, 아무 예고 없이 미스터리하게 사라질 가능성에 맡겨서는 안 된다는 것이 그 전제입니다.좋은 테이블 구조를 권장하지만 대용량 데이터를 저장해야 하는 경우 열 용량을 다음과 같이 변경할 수 있습니다.
TEXT: 65,535 characters - 64 KB
MEDIUMTEXT: 16,777,215 - 16 MB
LONGTEXT: 4,294,967,295 characters - 4 GB
SQL 데이터베이스의 한계를 확인해 봅니다.이 행의 필드 제한을 초과한 것일 수도 있습니다.
장고에서 이미지 필드를 사용하는 동안 동일한 오류가 발생했습니다. post_picture = models.ImageField(upload_to='home2/khamulat/mydomain.com/static/assets/images/uploads/blog/%Y/%m/%d', height_field=None, default=None, width_field=None, max_length=None)
를 하였습니다에 하였습니다. post_picture = models.ImageField(upload_to='images/uploads/blog/%Y/%m/%d', height_field=None, default=None, width_field=None, max_length=None)
오류는 사라졌습니다.다고다는dese고.
primary key set으로 먼저 테이블 구조를 만든 후 csv 파일을 업로드하려고 하면 이 오류가 발생했습니다.제 CSV 파일은 기본 키 열에 정보가 들어 있었습니다.다른 sql 서버에서 내보낸 것입니다.아무리 수출하고 수입하려고 해도 소용이 없었습니다.
제가 해결하기 위해 한 일은 제 db와 csv에 기본 키 열을 떨어뜨려 업로드한 후 다시 기본 키 열을 추가하는 것이었습니다.
위의 답변들은 제.ini 파일을 업데이트하라고 알려주지만, 좀 더 높은 길이를 추가할 수 있도록 열 길이를 TEXT 또는 LONGTEXT로 변경하는 것이 좋을 것 같습니다.
부울 타입 열에 0을 저장하려고 하는데 실수로 0을 문자열로 전달하는 경우에도 같은 문제가 발생했습니다.
정확한 데이터를 만족스러운 데이터 유형으로 전달해야 합니다.
제 경우에는 부울 타입 열에 0이 아닌 '0'을 저장하려고 했습니다.
해당 열(예: max_length="150")에 대한 단어 수를 잘렸을 수 있으므로 모델로 이동하여 확인합니다.
언급URL : https://stackoverflow.com/questions/15949038/error-code-1406-data-too-long-for-column-mysql
'programing' 카테고리의 다른 글
Swift 3에서 배열에서 개체 제거 (0) | 2023.09.08 |
---|---|
docker-compose.yml에서 서비스를 비활성화할 수 있는 방법이 있습니까? (0) | 2023.09.08 |
JWT를 사용한 소켓 IO 연결 인증 (0) | 2023.09.03 |
PowerShell에서 보안 FTP를 자동화하는 가장 좋은 방법은 무엇입니까? (0) | 2023.09.03 |
전화기의 Google Play 스토어 앱에서 "Rate This App" 링크 (0) | 2023.09.03 |