CREATE TABLE `x` (
`msg` varchar(256) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
-------------------
【c++,using mysqlpp】string insertSQL = string("insert into test.x values('\0\0hello')"); //字符串里面有\0字符
query << insertSql;
SimpleResult res;
conn.execute(res,query);---------------------mysql> select * from test.x;
+---------+
| msg |
+---------+
| hello |
+---------+
1 row in set (0.00 sec)mysql> select hex(msg) from test.x;
+----------------+
| hex(msg) |
+----------------+
| 000068656C6C6F |
+----------------+
1 row in set (0.00 sec)--------------------------
mysqlbinlog生成的sql语句insert into test.x values('^@^@hello'); /* 注意^@是vi显示的结果,用hexdump查看ASCII为0 */--------------------------问题来了,
这样执行mysqlbinlog mysql-bin.000xx | mysql
这样的语句直接用mysql执行会出现语法错误(那个^@,也就是\0)把字符串截断了,于是出现语法错误请问怎样让mysqlbinlog生成正确的经过转义的sql语句呢(将^@变成字符串"\0")?或者让mysql在执行的时候可以支持中间为\0的字符串?
`msg` varchar(256) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
-------------------
【c++,using mysqlpp】string insertSQL = string("insert into test.x values('\0\0hello')"); //字符串里面有\0字符
query << insertSql;
SimpleResult res;
conn.execute(res,query);---------------------mysql> select * from test.x;
+---------+
| msg |
+---------+
| hello |
+---------+
1 row in set (0.00 sec)mysql> select hex(msg) from test.x;
+----------------+
| hex(msg) |
+----------------+
| 000068656C6C6F |
+----------------+
1 row in set (0.00 sec)--------------------------
mysqlbinlog生成的sql语句insert into test.x values('^@^@hello'); /* 注意^@是vi显示的结果,用hexdump查看ASCII为0 */--------------------------问题来了,
这样执行mysqlbinlog mysql-bin.000xx | mysql
这样的语句直接用mysql执行会出现语法错误(那个^@,也就是\0)把字符串截断了,于是出现语法错误请问怎样让mysqlbinlog生成正确的经过转义的sql语句呢(将^@变成字符串"\0")?或者让mysql在执行的时候可以支持中间为\0的字符串?
mysql命令行中执行,类似这样的命令“mysqlbinlog mysql-bin.xx| mysql”
通过mysqlbinlog读取binlog文件,生成sql,然后用mysql执行
我也出现过binlog生成的就是不对的,后来只好迁移到高版本的mysql上