Как сохранить двоичные данные (со старшими байтовыми значениями) в строку MySQL Unicode
У меня есть устаревшая система, которая отправляет и читает двоичные данные в существующую таблицу MySQL (версия 5.6.34 на случай, если это имеет значение). Мне нужно записать данные такого же типа в те же таблицы в нашей новой системе (чтобы части старой системы могли их читать). Тем не менее, когда я пытаюсь записать двоичные данные, MySQL, похоже, обрезает все, что находится в верхнем байтовом диапазоне (возможно, то, что не является допустимым Unicode).
Я не могу изменить таблицу. Как мне написать те же данные. (Старая система использует бинарный драйвер mysql на другом языке, поэтому я не могу воспроизвести все, что она делает).
mysql> create table foobar (a_session longtext character set utf8 collate utf8_general_ci);
Query OK, 0 rows affected (0.14 sec)
mysql> insert into foobar values (_binary X'4D798053514C');
Query OK, 1 row affected, 1 warning (0.12 sec)
mysql> select * from foobar;
+-----------+
| a_session |
+-----------+
| My |
+-----------+
1 row in set (0.13 sec)
Я хочу команду обновления / вставки, которая вместо этого будет отображать что-то вроде:
| My�SQL |
и имеют те же двоичные байты, которые я отправляю в команде.
1 ответ
При выполнении этого небольшого теста, также предоставьте
SHOW VARIABLES LIKE 'char%';
80
не очень хороший "персонаж":
big5, binary, cp932, eucjpms, euckr, gb2312,
gbk, sjis, ujis, utf8, utf8mb4 0 0 ''
ascii, swe7 1 1 '?'
armscii8, dec8, greek, hebrew, hp8, latin2,
latin5, latin7, tis620 2 1 ''
cp1251 2 1 'Ђ'
cp850, cp852, keybcs2 2 1 'Ç'
cp866 2 1 'А'
macce, macroman 2 1 'Ä'
cp1250, cp1256, cp1257, geostd8, latin1 3 1 '€'
koi8r, koi8u 3 1 '─'
То есть, latin1
(и несколько других CHARACTER SETs
) интерпретировать гекс 80 как Euro
; другие кодировки дают вам менее интересные вещи. Чего ты ожидал??