개요
Laravel 의 DB Migration 기능을 사용할 경우 string() 함수를 사용하면 DBMS 의 VARCHAR 타입으로 생성이 됩니다.
즉 아래 소스는 name 이라는 20 byte 짜리 VARCHAR 컬럼을 만들게 됩니다.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name', 20);
$table->timestamps();
});
}
CODE
만약 DBMS 를 사용한다면 VARCHAR2는 byte 단위로 문자를 처리해서 한글과 영어에 따라 입력할 수 있는 단어 길이가 달라지게 됩니다.
이럴 경우 yajra/laravel-oci8 패키지에서 제공하는 nvarchar2() 함수를 string() 함수대신 사용하면 됩니다.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->nvarchar2('name', 20);
$table->timestamps();
});
}
CODE
타 DB와 호환성 확보하기
만약 운영은 Oracle 을 사용하고 로컬 개발은 MySQL 을 사용하거나 laravel 로 만든 솔루션을 타 DBMS 환경에서 구동해야 한다면 MySQL 용 BluePrint 클래스에는 nvarchar2() 함수가 없으므로 migration 에 실패하게 됩니다.
이를 해결하려면 Illuminate\Database\Schema\Blueprint 클래스에 다음과 같이 nvarchar2() 를 추가해 주면 됩니다.
public function string($column, $length = null)
{
$length = $length ?: Builder::$defaultStringLength;
return $this->addColumn('string', $column, compact('length'));
}
// 추가
public function nvarchar2($column, $length = null)
{
return $this->string($column, $length);
}
CODE
같이 보기