Я пытаюсь сохранить строку текста в столбце mysql. Строка текста содержит слово с символом ударения:
Labrèche
Таблица кодируется с использованием utf8mb4, как видно из следующего оператора:
mysql> SHOW CREATE TABLE forge.fba_shipments_reports\G
*************************** 1. row ***************************
Table: fba_shipments_reports
Create Table: CREATE TABLE `fba_shipments_reports` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`report_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`report_line` text COLLATE utf8mb4_unicode_ci NOT NULL,
`added_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)
Я проверил переменные сеанса для соединения моего приложения Laravel, и он также показывает utf8mb4:
>>> DB::select(DB::raw("SHOW SESSION VARIABLES LIKE 'character\_set\_%'"));
=> [
{#3346
+"Variable_name": "character_set_client",
+"Value": "utf8mb4",
},
{#3351
+"Variable_name": "character_set_connection",
+"Value": "utf8mb4",
},
{#3344
+"Variable_name": "character_set_database",
+"Value": "utf8",
},
{#3352
+"Variable_name": "character_set_filesystem",
+"Value": "binary",
},
{#3349
+"Variable_name": "character_set_results",
+"Value": "utf8mb4",
},
{#3340
+"Variable_name": "character_set_server",
+"Value": "latin1",
},
{#3341
+"Variable_name": "character_set_system",
+"Value": "utf8",
},
]
Когда я пытаюсь сохранить эту строку, я получаю ошибку:
Подсветка / База данных / QueryException с сообщением «SQLSTATE [HY000]: общая ошибка: 1366 Неверное строковое значение: '/ xE8che / x09G ...» для столбца «report_line» в строке 1 (SQL: вставить в fba_shipments_reports
(report_id
, report_line
) values (foo, Labr�che)) '
Почему этот символ вызывает проблемы, если я использую кодировку utf8mb4? Я думал, что эта кодировка должна поддерживать эти символы.