【MySQL】HEX,UNHEX 用例一则

使用mysqldump 对一个数据库进行备份,然后恢复到另一个数据库中,遇到如下报错

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Y','Y','root');

显然是语句的语法问题,查看文件对应位置的内容,是红色部分导致报错。

LOCK TABLES `USER` WRITE;

/*!40000 ALTER TABLE `USER` DISABLE KEYS */;

INSERT INTO `USER` VALUES (1,'Y','Y','Y','Y','Y','Y','XXX酆9聜锟  Y','Y','yangql');

PASSWORD 字段为 mediumblob 字段导致“’”分隔符被吞噬,由于保存密码字段的二进制编码的问题,引号分隔符被当作了数据的一部分,从而使得数据导入异常。

CREATE TABLE `USER` (

  `USER_ID` bigint(20) NOT NULL,

  `ALTER_PRIV` char(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '0',

 .....

  `PASSWORD` mediumblob NOT NULL,

  `SELECT_PRIV` char(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '0',

 .....

  UNIQUE KEY `UNIQUEUSER` (`USERNAME`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

尝试手工对导出的文本文件进行修改,总是将密码修改为其他字段一直不成功

又由于此表被其他表作为外键父表引用,不能直接对插入的数据进行delete操作,选择手工将密码字段update。如果将一个字段更新为二进制模式呢?

这里使用把16进制的字符串转为二进制的数据导入库中,

update user set PASSWORD=UNHEX('79616E67716C20697320E58C97E59CA8E58D97E696B9') where USERNAME='yangql';

介绍一下 HEX,UNHEX的使用方法。

root@rac1 : (none) 22:05:17> select hex('yangql is 北在南方');

+----------------------------------------------+

| hex('yangql is 北在南方')                    |

+----------------------------------------------+

| 79616E67716C20697320E58C97E59CA8E58D97E696B9 |

+----------------------------------------------+

1 row in set (0.00 sec)

root@rac1 : (none) 22:05:23> select

unhex('79616E67716C20697320E58C97E59CA8E58D97E696B9');

+-------------------------------------------------------+

| unhex('79616E67716C20697320E58C97E59CA8E58D97E696B9') |

+-------------------------------------------------------+

| yangql is 北在南方                                    |

+-------------------------------------------------------+

1 row in set (0.00 sec)

时间: 2024-11-17 22:01:46

【MySQL】HEX,UNHEX 用例一则的相关文章

MySQL内核月报 2015.01-MySQL · 捉虫动态· mysql client crash一例

背景 客户使用mysqldump导出一张表,然后使用mysql -e 'source test.dmp'的过程中client进程crash,爆出内存的segment fault错误,导致无法导入数据. 问题定位 test.dmp文件大概50G左右,查看了一下文件的前几行内容,发现: 问题定位到第一行出现了不正常warning的信息,是由于客户使用mysqldump命令的时候,重定向了stderr.即: mysqldump ...>/test.dmp 2>&1 导致error或者warn

MySQL 配置优化几例

1.当写入时,使用 innodb_flush_method=O_DIRECT 来避免双缓冲. 2. 避免使用 O_DIRECT 和 EXT3 文件系统 – 你将序列化所有要写入的. 3. 分配足够的 innodb_buffer_pool_size 来加载整个 InnoDB 文件到内存中– 少从磁盘中读取. 4. 不要将 innodb_log_file_size 参数设置太大, 这样可以更快同时有更多的磁盘空间 – 丢掉多的日志通常是好的,在数据库崩溃后可以降低恢复数据库的时间. 5. 不要混用

MySQL的字符串函数使用说明_Mysql

通常以串的整体作为操作对象,如:在串中查找某个子串.求取一个子串.在串的某个位置上插入一个子串以及删除一个子串等.两个字符串相等的充要 条件是:长度相等,并且各个对应位置上的字符都相等.设p.q是两个串,求q在p中首次出现的位置的运算叫做模式匹配.串的两种最基本的存储方式是顺序存 储方式和链接存储方式. 下面我们来看看MySQL中的字符串函数 假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL. 对于在字符串位置操作的函数,第一个位置的编

MySQL中字符串函数详细介绍_Mysql

符串或串(String)是由零个或多个字符组成的有限序列.一般记为 s='a1a2•••an'(n>=0).它是编程语言中表示文本的数据类型. 通常以串的整体作为操作对象,如:在串中查找某个子串.求取一个子串.在串的某个位置上插入一个子串以及删除一个子串等.两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等.设p.q是两个串,求q在p中首次出现的位置的运算叫做模式匹配.串的两种最基本的存储方式是顺序存储方式和链接存储方式. 下面我们来看看MySQL中的字符串函数 假如结果的长度

mysql 字符串比较函数

字符串函数 字符串比较函数 假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL.请参见7.5.2节,"调节服务器参数". 对于在字符串位置操作的函数,第一个位置的编号为 1. ASCII(str) 返回值为字符串str 的最左字符的数值.假如str为空字符串,则返回值为 0 .假如str 为NULL,则返回值为 NULL. ASCII()用于带有从 0到255的数值的字符. mysql> SELECT ASCII('2')

Linux利用UDF库实现Mysql提权_Mysql

环境: os:linux(bt5)   database:mysql   简述: 通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同.   要求:  在mysql库下必须有func表,并且在‑‑skip‑grant‑tables开启的情况下,UDF会被禁止:   过程: 得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令 1,得到插件库路径 mysql> show variables like "%p

Mysql C API编程:用C语言编写的Mysql编程接口

软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程. API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能. Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作. Mysql的安装 要进行Mysql编程首先要在充当Mysql服务器的电脑和

MYSQL初学者使用介绍

其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看.我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵. 一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mys

轻松八句话 教会你完全搞定MySQL数据库

本文让你用轻松八句话就可教会你完全搞定MySQL数据库. 一.连接MYSQL 格式: 以下为引用的内容:mysql -h主机地址-u用户名-p用户密码  1.例1:连接到本机上的MySQL: 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>. 2.例2:连接到远程主机上的MYSQL.假设远程主机的IP为:1