Я запускаю скрипт Python для вставки записи в таблицу. Я читаю данные из электронной таблицы, содержащие ячейки со специальными символами.
В моем сценарии я запускаю следующие команды перед выполнением следующих команд:
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
SET character_set_connection=utf8mb4;
SET collation_connection = utf8mb4_unicode_ci;
Вот структура моей таблицы:
CREATE TABLE `staging` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`d_date` date NOT NULL,
`m_date` date NOT NULL,
`market` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'US',
`cola` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`colb` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=265 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Кодировка таблицы: UTF8MB4 Сопоставление таблицы: UTF8MB4_UNICODE_CI
Переменные среды:
ПОКАЗАТЬ ПЕРЕМЕННЫЕ, КАК '%collation%';
collation_connection latin1_swedish_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci
ПОКАЗАТЬ ПЕРЕМЕННЫЕ, КАК '%char%';
character_set_client latin1
character_set_connection latin1
character_set_database utf8mb4
character_set_filesystem binary
character_set_results latin1
character_set_server utf8mb4
character_set_system utf8
character_sets_dir /usr/local/mysql-5.7.20-macos10.12-x86_64/share/charsets/
Запрос:
insert into staging (d_date, m_date, market, cola, colb )
values ('2019-07-18', '2019-07-01', 'US', 'ARCA', 'Sodius\xa0Consumer Auto');
Ошибка:
_mysql_exceptions.OperationalError: (1366, "Incorrect string value: '\\xA0Consu...' for column 'colb' at row 1")
Ожидаемый результат: строка должна быть вставлена в базу данных.
Sodiusxa0Con...
(Если sql_mode включает NO_BACKSLASH_ESCAPES, то символ обратной косой черты будет рассматриваться как обычный символ.) Я подозреваю, что оператор SQL, показанный в вопросе, со строковым литералом, не является фактическим оператором. казнен. - person spencer7593   schedule 20.07.2019