如何插入十六进制/二进制?进入mysql数据库?

时间:2015-03-13 13:36:24

标签: python mysql

我正在尝试将一些十六进制值插入到mysql db的字段中

这是我需要插入的那种值:

['D\x93\xb4s\xa5\x9eM\\\x14\xf3*\x95\xf9\x83\x1d*%P\xdb\xa2', 'D\xbf\xef\xb0\xc8\xff\x17\xc6Y6\xc6\xb4,p\xaa\xb1\xf2V\xdaa', 'D\xd7~~\x02\xd3|}\xfcN\xc1\x03\x97\x07\xb5<U\x16Y\x9e', '\xf3\xb6\xc2,Y/[i\x98\x93\x9d\xb2R\x93\x84\x12W\x1a3\x19', '\xf3\xb7\xce\x1f-n\x89\xb6\x87K\x9dsf\xcb=w\xab\x1a\xa0<', '\xf3\xbf7\x04d\xe6\xdf\xf8"9\x1d\x05\x01\xe4\xd4\xb0\xad\x80\xc0\xf5']

这是我的表

 +--------------+--------------+------+-----+---------+-------+
    | Field        | Type         | Null | Key | Default | Extra |
    +--------------+--------------+------+-----+---------+-------+
    | consensus    | char(40)     | NO   |     | NULL    |       |
    | identityb32  | char(40)     | NO   |     | NULL    |       |
    | pubdate      | char(40)     | NO   |     | NULL    |       |
    | dirport      | char(6)      | NO   |     | NULL    |       |
    | ip           | char(40)     | NO   |     | NULL    |       |
    | orport       | char(40)     | NO   |     | NULL    |       |
    | identityhash | char(40)     | NO   |     | NULL    |       |
    | nick         | char(40)     | NO   |     | NULL    |       |
    | version      | char(40)     | NO   |     | NULL    |       |
    | flags        | varchar(500) | NO   |     | NULL    |       |
    | identity     | char(40)     | NO   |     | NULL    |       |
    | digest       | char(40)     | NO   |     | NULL    |       |
    | pubtime      | char(40)     | NO   |     | NULL    |       |
    +--------------+--------------+------+-----+---------+-------+
    13 rows in set (0.00 sec)

目前我正在添加十六进制数据,因为我会做一个普通的字符串,但这会导致添加一个不可读的输入:

D??s??M?*???*%P?  

如何添加十六进制数据?

3 个答案:

答案 0 :(得分:0)

检查CHARSET

   CREATE TABLE `t` (
      `id` varchar(32) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

答案 1 :(得分:0)

可能真正的方式是HEX()UNHEX()。但是,这篇文章可能会有所帮助Inserting hex value mysql

答案 2 :(得分:0)

那些不是十六进制值。

我可能会对此不以为然,但我发现插入你的价值观的唯一方法就是这样:

$string = 'D\x93\xb4s\xa5\x9eM\\\x14\xf3*\x95\xf9\x83\x1d*%P\xdb\xa2';
$pattern = '#\\\#';
$replacement = '\\\\\\';
$insert_value = preg_replace($pattern, $replacement, $string);

之后继续插入。您可以使用VARCHAR(256)作为列。

我很肯定有很多更好的方法可以解决这个问题。


显然我在SO的python部分。我以为是PHP。这是订阅多个标签的原因。