Неверное значение строки для столбца в MySQL с utf8

Запущенный ниже запрос на MySQL верстак завершается с ошибкой неверного строкового значения.

insert into mytable (key) values (0x8080808080) gives me below error:
Error Code: 1366. Incorrect string value: '\x80\x80\x80\x80\x80' for column      'key' at row 1

Тип данных столбца определен как char(5) и использует таблицу charset/collation по умолчанию, т. Е. "Utf8 - collation default". Этот запрос не может вставить любое символьное значение выше 0x7F.

Я хочу понять, почему он не может вставить значения выше 0x7F. Если я изменяю тип charset/collation на latin1__, он работает нормально до символов 0xFF.

1 ответ

Этот запрос не может вставить любое символьное значение выше 0x7F.

Не удается вставить значение байта выше 0x7F. Если вы хотите вставить символ U+0080, вам придется закодировать его как последовательность UTF-8. 0xC280, Эти байты больше 0x7F, но вставят OK, потому что это допустимая последовательность UTF-8.

Это верно для любой кодировки; 0x8080 является недопустимой последовательностью байтов в Shift-JIS, поэтому, если вы создали столбец символьной строки, хранящийся в sjis это значение не сможет достичь вершины. latin1с другой стороны, не имеет недопустимых байтовых последовательностей, поэтому все байты будут работать там.

Но если вы хотите хранить произвольные байты и не заботитесь о символах и кодировках, вы должны использовать двоичное сопоставление (например, VARBINARY тип столбца) вместо.

Другие вопросы по тегам