【MySQL】HEX,UNHEX 用例一则

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 使用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');显然是语句的语法问题,查看文件对应位置的内容,是红色部分导致报错。
使用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)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 MySQL
Mysql 生成100w条测试数据
https://nsimple.top/archives/mysql-create-million-data.html 有时候我们需要对大数据进行测试,本地一般没有那么多数据,就需要我们自己生成一些。
2749 0
|
SQL 关系型数据库 MySQL
MySQL 数据库中 CAST 函数如何使用?
MySQL 数据库中 CAST 函数如何使用?
214 0
|
SQL 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
MySQL-其他函数(补充)
MySQL-其他函数(补充)
103 0
|
存储 关系型数据库 MySQL
【MySQL】为什么MySQL 数据库内部使用的字符集是 ASCII 码?底层原理是什么?
【MySQL】为什么MySQL 数据库内部使用的字符集是 ASCII 码?底层原理是什么?
391 0
|
关系型数据库 MySQL Python
快速为MySQL创建大量测试数据
1. 引言 在PostgreSQL中可以用generate_series()函数来快速生成大量测试数据,在MySQL中没有提供类似的东西。那么在做测试的时候,要往表中插入大量数据库该怎么办?可以写一个循环执行INSERT语句的存储过程,但这种方式还是太慢,我试了下,1秒钟居然只能插500条记录。
1507 0
|
关系型数据库 MySQL 测试技术
软件测试mysql面试题:mysql 随机查询表“test”的 10 条数据?
软件测试mysql面试题:mysql 随机查询表“test”的 10 条数据?
105 0
|
关系型数据库 MySQL 数据库
mysql 编码的问题
(1)  当使用mysql数据库时,要确定五个编码。(1)首先我们要设置数据库的编码;(2)然后确定程序中的请求和响应的编码和数据库一致;(3)连接数据库的编码和数据库一致,jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8(注意这句话一定不要写错了)(4)页面编码和数据库一致。
1417 0
|
SQL 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库