2017-06-29 193 views
0

我在我的項目存儲在數據庫中的圖像的要求,當前列類型是文本,所以當試圖存儲圖像SQL拋出約串太長的錯誤。所以,我創建了一個遷移laravel 5.4數據庫字符集和校對二進制類型

Schema::table('pages', function (Blueprint $table) { 
     $table->binary('extras')->change(); 
    }); 

當我運行它拋出一個錯誤

SQLSTATE [42000]遷移:語法錯誤或訪問衝突:1253整理 「utf8mb4_unicode_ci」是無效字符集'二進制'(SQL: ALTER TABLE頁CHANGE額外羣衆演員乙LOB DEFAULT NULL COLLATE utf8mb4_unicode_ci)使用默認排序規則和茶

IM RSET在config.database

 'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 

你對這些不支持BLOB格式?如果沒有什麼是這個正確的設置,我有沒有必要對Unicode或表情符號支援。

我用mysql V5.7

回答

0

onlyway做的是刪除列,並使用原始的SQL查詢像

Schema::table('portfolio', function (Blueprint $table) { 
      $table->dropColumn('image'); 
     }); 

     Schema::table('portfolio', function (Blueprint $table) { 
      $table->charset = 'utf8_bin'; 
      DB::statement("ALTER TABLE `portfolio` ADD `square_image` LONGBLOB"); 
      DB::statement("ALTER TABLE `portfolio` ADD `portfolio_image` LONGBLOB"); 
     }); 
0

嘗試使用LONGTEXT類型:

$table->longText('extras'); 

我唯一的建議woule是從表中分離blob類型到自己,因爲他們都知道放緩查詢。

+0

長文本仍然沒有足夠長的時間來存儲的base64圖像,它只是一個圖像緩存持續性存儲,後臺作業火災地暖緩存,這樣的速度是不是一個問題,我覺得要做到這一點是刪除列,並使用原始的SQL語句來創建LONGBLOB類型的唯一途徑 –