MYSQL SOURCE报错 ERROR: ASCII

由 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部分控制字符的截图

详细见我转的文章:
http://blog.itpub.net/7728585/viewspace-2129010/

时间: 2024-12-28 05:02:17

MYSQL SOURCE报错 ERROR: ASCII的相关文章

mysql登录报错提示:ERROR 1045 (28000)的解决方法_Mysql

本文分析了mysql登录报错提示:ERROR 1045 (28000)的解决方法.分享给大家供大家参考,具体如下: 一.问题: 公司linux系统的mysql数据库root用户设置过密码,但常常用命令'mysql -u root -p'登录报错,有时又能登录.登录报错信息为: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localho

C#ExecuteNonQuery操作mysql数据库报错

问题描述 C#ExecuteNonQuery操作mysql数据库报错 public void ExcelToDataSet() { try { OpenFileDialog openfiledialog = new OpenFileDialog(); openfiledialog.Filter = "Execl files (*.xlsx)|*.xlsx"; openfiledialog.FilterIndex = 0; openfiledialog.RestoreDirectory

mysql起动报错The server quit without updating PID file /usr/local/mysql/data/

mysql起动报错The server quit without updating PID file (/usr/local/mysql/data/ 查看错误日志显示: mysqld_safe mysqld from pid file /usr/local/mysql/data/mysql.pid ended 肯定是配置文件问题: 新安装的测试机  hostname server01  centos 6.5 环境   mysql 5.6.12 单机 64位 二进制包安装 my.cnf 里面只有一

select-jsp 连接 mysql 查询 报错500

问题描述 jsp 连接 mysql 查询 报错500 源代码: <%@ page contentType="text/html; charset=GB2312"%> <%@ page import="java.util.*,java.sql.*"%> <% request.setCharacterEncoding("GB2312"); //链接数据库程序 Class.forName("org.gjt.mm.

linux使用wkhtmltopdf报错error while loading shared libraries:

官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在linux上执行 ./wkhtmltopdf –page-size A4 www.baidu.com pdf.pdf 报错   error while loading shared libraries: libXrender.so.1 root@mag-sit:/home/mag-sit/wkhtmlt

sweeter-导入JavaWeb项目时,MySQL数据库报错

问题描述 导入JavaWeb项目时,MySQL数据库报错 五月 23 2014 10:19:38 上午 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.4.8.五月 23 2014 10:19:39 上午 org.apache.catalina.core.AprLifecycleListene

linux-数据如果直接输入 mysql -hIP 报错?

问题描述 数据如果直接输入 mysql -hIP 报错? linux 的登录用户是 root 数据如果直接输入 mysql -hIP 报错: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO). 然后说权限问题. 然后执行赋权操作 grant all privileges on . to 'root'@'%' identified by 'mysql'; grant all priv

spring分布式事物-atomikos mssql报错Error in recovery以及找不到存储过程

问题描述 atomikos mssql报错Error in recovery以及找不到存储过程 如题,我使用atomikos做spring分布式事物,同时支持Oracle.MySQL和MSSQL三种数据源.目前Oracle和MySQL都能调通,在测试MSSQL的过程中,一直报错. 错误如下: 2015-06-03 14:08:45,911 WARN com.atomikos.datasource.xa.XATransactionalResource.logWarning:24 - Error i

myeclipse链接mysql数据库报错

问题描述 myeclipse链接mysql数据库报错 Unknown system variable 'tx_read_only' Could not retrieve transation read-only status server --- The error occurred in sqlmaps/user/userSQL.xml. --- The error occurred while applying a parameter map. --- Check the user.logi