MYSQLSOURCE报错ERROR:ASCII怎么办-创新互联

这篇文章将为大家详细讲解有关MYSQL SOURCE报错ERROR: ASCII怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

南阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

由 ASCII '\0' 引起的MYSQL SOURCE错误

有一个朋友给出一个错误:
source test.sql
ERROR: 
ASCII '\0' appeared in the statement, but this is not allowed unless option 
--binary-mode is enabled and mysql is run in non-interactive mode. Set --bin
ary-mode to 1 if ASCII '\0' is expected. Query: ''.


以前没见过这个错误,于是仔细看了一下。先根据报错查看--binary-mode的意思:
  --binary-mode       By default, ASCII '\0' is disallowed and '\r\n' is
                      translated to '\n'. This switch turns off both features,
                      and also turns off parsing of all clientcommands except
                      \C and DELIMITER, in non-interactive mode (for input
                      piped to mysql or loaded using the 'source' command).
                      This is necessary when processing output from mysqlbinlog
                      that may contain blobs.


意思就是ASCII '\0' 是不允许的,除非在binary mode下,为什么会不允许呢?
原因在于一个存文本模式的sql脚本不可能存在'\0','\0'对应ASCII的00,NUL,
我们知道在纯文本模式下,任何字符都对应自己的编码,即使是空格、换行、回车、制表符等
,00 NUL只会在二进制模式的文件中才有,当使用非交互模式的时候,比如
在mysqlbinlog|mysql -u root -p 时候是用会关闭,但是我测试了一下也不行
不管使用pipe管道还是重定向都不行:
[root@testmy ~]# cat test.sql|/mysqldata/mysql5.7/bin/mysql  --socket=/mysqldata/mysql5.7/mysqld3307.sock  
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: ''.
[root@testmy ~]# /mysqldata/mysql5.7/bin/mysql  --socket=/mysqldata/mysql5.7/mysqld3307.sock <test.sql  =""   ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: ''.
也许这种方式只有在导入ROW格式的binlog才会用到吧。




下面是重现方式,简单的代码:
#include
#include




int main(void)
{
   FILE* fd;
   char a='\0';
   
   if(!(fd = fopen("test.sql","a+")))
        {
                perror("error:");
                exit(1);
        }
   fputc(a,fd);
   fputc('\n',fd);
   fclose(fd);
}


向test.sql写入一个\0即可,就可以重现了。下面是一个ASCII部分控制字符的截图
MYSQL SOURCE报错ERROR: ASCII怎么办

关于“MYSQL SOURCE报错ERROR: ASCII怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

本文题目:MYSQLSOURCE报错ERROR:ASCII怎么办-创新互联
网站URL:https://www.cdcxhl.com/article4/csocie.html

成都网站建设公司_创新互联,为您提供App开发网站设计公司服务器托管面包屑导航做网站营销型网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

商城网站建设