fix description
This commit is contained in:
+8
-3
@@ -13,9 +13,14 @@ return new class extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
if (Schema::hasTable('products') && ! Schema::hasColumn('products', 'description')) {
|
if (Schema::hasTable('products') && ! Schema::hasColumn('products', 'description')) {
|
||||||
Schema::table('products', function ($table) {
|
// charset صریح — روی سرورهای latin1-default، TEXT بدون charset فارسی را نمیپذیرد
|
||||||
$table->text('description')->nullable();
|
DB::statement(
|
||||||
});
|
'ALTER TABLE `products` ADD COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
|
);
|
||||||
|
} elseif (Schema::hasTable('products') && Schema::hasColumn('products', 'description')) {
|
||||||
|
DB::statement(
|
||||||
|
'ALTER TABLE `products` MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! Schema::hasTable('settings')) {
|
if (! Schema::hasTable('settings')) {
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* روی بعضی سرورها (DB default = latin1) ستون description بدون charset اضافه شده
|
||||||
|
* و ذخیرهٔ فارسی با خطای 3988 میخورد.
|
||||||
|
*/
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
if (! Schema::hasTable('products') || ! Schema::hasColumn('products', 'description')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DB::statement(
|
||||||
|
'ALTER TABLE `products` MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
// عمداً به latin1 برنمیگردیم
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -93,8 +93,8 @@ PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|||||||
|
|
||||||
SET @sql = IF(
|
SET @sql = IF(
|
||||||
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description') = 0,
|
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description') = 0,
|
||||||
'ALTER TABLE `products` ADD COLUMN `description` TEXT NULL',
|
'ALTER TABLE `products` ADD COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL',
|
||||||
'SELECT ''skip products.description'' AS info'
|
'ALTER TABLE `products` MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
);
|
);
|
||||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ستون products.description روی بعضی سرورها latin1 است → فارسی ذخیره نمیشود (MySQL 3988)
|
||||||
|
-- idempotent — چند بار قابل اجرا
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
SET @db = DATABASE();
|
||||||
|
|
||||||
|
SET @sql = IF(
|
||||||
|
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description') = 0,
|
||||||
|
'ALTER TABLE `products` ADD COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL',
|
||||||
|
'ALTER TABLE `products` MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE
|
||||||
|
FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description';
|
||||||
@@ -7,11 +7,13 @@ START TRANSACTION;
|
|||||||
|
|
||||||
SET @db = DATABASE();
|
SET @db = DATABASE();
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
SET @sql = IF(
|
SET @sql = IF(
|
||||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description') = 0,
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'products' AND COLUMN_NAME = 'description') = 0,
|
||||||
'ALTER TABLE `products` ADD COLUMN `description` TEXT NULL',
|
'ALTER TABLE `products` ADD COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL',
|
||||||
'SELECT ''skip products.description'' AS info'
|
'ALTER TABLE `products` MODIFY COLUMN `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'
|
||||||
);
|
);
|
||||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user