编码—如何将二进制数据(带高位字节值)保存到unicode mysql行中

3df52oht  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(311)

我有一个遗留系统,它将二进制数据发送和读取到一个现有的mysql表中(5.6.34版)。在我们的新系统中,我需要将相同类型的数据写入相同类型的表(以便旧系统的某些部分可以读取它)。然而,当我尝试写二进制数据时,mysql似乎去掉了高位字节范围内的任何内容(可能是无效的unicode)。
我不能换table。如何写入相同的数据(旧系统使用的是另一种语言的二进制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     |

和我在命令中发送的二进制字节相同。

kjthegm6

kjthegm61#

当运行这个小测试时,还提供

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 ; 其他字符给你不太有趣的东西。你在期待什么??

相关问题