
这位网友对 MySQL 官方手册里的 hex 和 unhex 函数有些疑问: 自己实验结果和手册中给的结果有些差异。
手册上是这样写的:
完后自己实验结果反而这样:
第一条语句里 X'616263'和*UNHEX(HEX('abc'))*的执行结果和手册不一致,第二条语句执行结果和手册完全一致。
我自己虚拟机上的实验:结果也不正确。
我猜想:函数的执行结果肯定是对的(大厂不可能犯这样的低级错误,有错也是我自身的问题),但是此处进制没做正常转换,一定是客户端在结果转码上有哪些地方默认有变。为此查询 MySQL 命令行的 status 结果:
上面包含一行:Binary data as: Hexadecimal这一行意思是说 MySQL 命令行把二进制字符打印为十六进制字符。
到这里应该判断下这两个十六进制字符的编码:结果都为 binary 。
既然编码为 binary ,直接用 convert 函数转码即可:转码后的结果正确。
到这里,问题是解释通了,不过能不能每次不进行转码而直接查呢? 当然可以。MySQL 命令行客户端有个选项( --binary-as-hex )用来控制是否打印二进制数据为十六进制,MySQL 命令行默认开启。
只需关闭这个选项即可, 写入配置文件(my.cnf里[mysql]段下)或者是命令行带入都可以:结果正确。
还有一个通用选项:--skip-binary-as-hex , 带上后效果一样。
需要注意的是:这个选项也同时影响字段类型为 BLOB ,BINARY 等的表数据输出。
mysql数据库是以文件夹形式存放在data目录下,拷贝整个data目录就可以。但是mysql默认存储引擎是MyISAM,一个数据表是对应三个文件的,这种拷贝方式可能会造成数据丢失,重要的数据,还是备份sql文件比较保险。
如果您在Linux或Unix系统上执行的是“ls -l”命令,那么输出的结果可能是“drwxrwxr-x mysql root conf”。这表示当前目录中有一个目录,名称为“conf”,该目录的所有者是“root”,属组是“mysql”。这个输出中包含了很多有用的信息,包括文件或目录的权限,所有者,属组和文件名。如果您希望了解有关这些信息的更多细节,可以参考“ls”命令的手册页,或者尝试在网上搜索关于Linux或Unix文件权限的更多信息。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)