programing

라라벨:문자열 데이터, 오른쪽 잘림: 1406 데이터가 열에 대해 너무 깁니다.

newsource 2023. 9. 2. 08:32

라라벨:문자열 데이터, 오른쪽 잘림: 1406 데이터가 열에 대해 너무 깁니다.

저는 '호텔'이라는 칸이 있는 테이블이 있습니다.이 프로젝트는 Laravel 5.4에서 만들어졌기 때문에 Migrations를 사용했습니다.

$table->string('hotel', 50);

MYSQL VARCHAR (50) 입니다.제가 개발할 때 "HILTON NYK 5"와 같은 짧은 호텔 이름을 사용했기 때문에 잘 작동했습니다.

지금 프로젝트가 진행 중인데 고객이 긴 호텔 이름을 입력할 수 없는 이유를 물었습니다.'롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱롱

그것은 나에게 오류를 주었습니다.

"SQLSTATE[22001]:문자열 데이터, 오른쪽 잘림: 1406 데이터가 1행의 '호텔' 열에 대해 너무 깁니다."

나는 내 속편 프로에서 데이터베이스를 열고 그것을 변경했습니다.

  • 첫 번째 VARCHAR(255)까지
  • 텍스트로

매번 변경한 후 동일한 "Long long long long long long long long long long long long long long long long long long and very very long long hotel name 5 starts"로 테스트하면 동일한 오류가 발생합니다(위 참조).

열 유형을 확인했습니다.

SHOW FIELDS FROM table_name

그리고 그것은 나를 주었습니다.

필드 | 유형

호텔 | 문자

따라서 필드 유형은 실제로 '텍스트'(65535자)입니다.

처음에 VARCHAR(50)을 설정한 Laravel Migration 파일(위 참조)과 연결되어 있는 것이 아닐까요?그러나 지금 테이블에 데이터가 있기 때문에 운영 환경에서 마이그레이션을 다시 실행할 수 없습니다.

도움을 주시면 감사하겠습니다.


업데이트: 저는 그것이 실제로 그 긴 호텔 이름을 DB에 저장한다는 것을 발견했습니다.하지만 사용자는 양식을 제출한 후에도 여전히 이 짜증나는 실수를 합니다...

새 마이그레이션을 생성하고 등록해야 합니다.composer du명령 및 실행php artisan migrate열의 유형을 변경하는 명령:

Schema::table('the_table_name', function (Blueprint $table) {
    $table->string('hotel', 255)->change();
});

로컬 개발에서 열 유형을 다음으로 변경해 보십시오.

$table->longText('columnName')

파일을 저장합니다.그것으로 해결되었습니다.그러나 라이브로 진행한 경우에는 알렉세이가 제안한 대로 새 마이그레이션을 생성한 다음 사용합니다.longText()열 유형.

텍스트 열에 base64로 사진을 저장하는 중에 SQL 오류가 발생했습니다.

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'picture' at row 1 

다음과 같이 마이그레이션했습니다.

$table->text('picture')

그런 다음 열 사진을 다음과 같이 변경했습니다.

$table->mediumText('picture')

텍스트 열이 64KB만 저장할 수 있다는 것을 깨달았습니다.

텍스트: 65,535자 - 64KB 중간 텍스트: 16,777,215자 - 16MB 긴 텍스트: 4,294,967,295자 - 4GB

자세한 내용은 mysql-text-data-type에 대한 스토리지 크기 이해를 참조하십시오.

열의 데이터 형식을 문자열에서 텍스트로 변경하고 길이를 지정하지 않습니다.

을 에서 합니다.stringtext.

다음 새로 고침을 사용하여 마이그레이션을 합니다.php artisan migrate:refesh

열의 데이터 형식을 문자열에서 텍스트로 변경하고 길이를 지정하지 않습니다.

$table->text('hotel')->change();

오류의 ① ② ③ ② ③ ③ ④ ③"SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'hotel' at row 1"/values = 111Mysql을합니다.

'text' 데이터 유형이 작동하지 않는 경우 데이터베이스 열의 데이터 유형을 'longtext'로 변경

public function up()
{
    Schema::table('news', function (Blueprint $table) {
        $table->text('content')->change();
    });
}

public function down()
{
    Schema::table('news', function (Blueprint $table) {
        $table->string('content', 65536)->change();
    });
}

저의 경우 MariaDB 업데이트와 연결되어 있습니다.

도움이 된 것:

파일machine)에서 Mariadb는 (linux machine)입니다./etc/mysql/mariadb.conf.d/50-server.cnf에서의 [mariadb]다음 행을 추가했습니다.

sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

MariaDB를 다시 시작하면 예외가 사라집니다.

$table->text("body"); <===== 문자열텍스트로 변경합니다.

  1. 문자열은 256자만 지원할 수 있습니다.
  2. 텍스트 지원 추가

제가 이 오류를 받았을 때는 테이블의 기존 데이터가 새 길이와 일치하지 않았기 때문입니다.그래서 그냥 길이를 늘렸고 효과가 있었습니다.

노력하고 있었습니다.

 $table->string('name', 10)->unique()->change();

TinyText에서 열을 변경하고 고유하게 만듭니다.하지만 한 열에는 12자가 들어 있었습니다.그래서 이렇게 만들었어요.

$table->string('name', 20)->unique()->change();

언급URL : https://stackoverflow.com/questions/48477861/laravel-string-data-right-truncated-1406-data-too-long-for-column