我有一个遗留系统,它将二进制数据发送和读取到现有的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 |
并且具有我在命令中发送的相同二进制字节。
答案 0 :(得分:0)
运行那个小测试时,也提供
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
;其他字符集给你的东西不那么有趣。你有什么期待?