2016-08-18 2 views
2

나는 MySQL의 쿼리의이 작은 조각에 문제가있는 출력을 나누기 . 업데이트 프로세스의 일종으로 응용 프로그램에서 프로그래밍 방식으로 생성됩니다. 결과는 예상대로이며 아무런 문제없이 뷰를 사용할 수 있습니다.mysqldump는 (0), " 0"또는 0x0으로

CHAR (0) 분리 필 드를 생성하는 subselect에서 문제점이 시작됩니다.

전체 데이터베이스를 내보낼 때. 이보기에서 출력은이보기가 덤프되어야하는 부분에서 정확히 끊어집니다. 완전한 뷰 정의 문자열은 키워드 SEPARATOR 바로 다음에 끝납니다. 완전한 휴식이 없습니다. 결과적으로 덤프 파일이 불완전 해져서 손상되어 다시 가져올 수 없습니다.

GROUP_CONCAT(`node`.`name` SEPARATOR "\0") 
GROUP_CONCAT(`node`.`name` SEPARATOR CHAR(0)) 
GROUP_CONCAT(`node`.`name` SEPARATOR 0x0) 

결과는 항상 동일합니다 :

/*!50001 DROP TABLE IF EXISTS `person_nodes`*/; 
/*!50001 DROP VIEW IF EXISTS `person_nodes`*/; 
/*!50001 SET @saved_cs_client   = @@character_set_client */; 
/*!50001 SET @saved_cs_results   = @@character_set_results */; 
/*!50001 SET @saved_col_connection  = @@collation_connection */; 
/*!50001 SET character_set_client  = utf8 */; 
/*!50001 SET character_set_results  = utf8 */; 
/*!50001 SET collation_connection  = utf8_general_ci */; 
/*!50001 CREATE ALGORITHM=UNDEFINED */ 
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ 
/*!50001 VIEW `person_nodes` AS select `p`.`person_id` AS `person_id`,`p`.`prename` AS `prename`,`p`.`name` AS `name`,(select group_concat(`node`.`name` separator ' */; 
/*!50001 SET character_set_client  = @saved_cs_client */; 
/*!50001 SET character_set_results  = @saved_cs_results */; 
/*!50001 SET collation_connection  = @saved_col_connection */; 

가 지금 내가이 문제를 해결하는 방법 단서를 해달라고

내가 널 문자를 처리하기 위해 다른 접근을 시도했다. 이 데이터베이스를 mysqldump을 통해 덤프하고 mysql을 통해 다른 곳으로 가져올 수 있어야합니다. 이는 배포 프로세스의 일종입니다.

현재 내가 mysql Ver 14.14 Distrib 5.5.50, for debian-linux-gnu (x86_64) using readline 6.3

을 사용하고 내가 그런 식 덤프을 만드는 오전 :

mysqldump -u <user> -p<pass> <dbname> -r <dumpfile> 

또는

mysqldump -u <user> -p<pass> <dbname> > <dumpfile> 

사람이 내가 mysqldump는 출력을 파괴 방지 할 수있는 방법 아이디어가 있습니까? 어쩌면 이것이 문자 집합/변환 문제일까요? 기본적으로 나는 utf8/utf8_general_ci을 사용하고 있습니다.

정보 : MysqlWorkbench 나 Navicat 같은 도구는보기를 편집 할 수 없습니다. 편집 가능한 결과 문자열도 같은 방식으로 손상됩니다.

답변

1

한편 나는 문제 (해결책이 아님)를 발견했다. (I 바로 의견을 이해한다면) 2011 년

https://bugs.mysql.com/bug.php?id=60920

나쁜 일이보기 때문에 그것은 MySQL 버전 5.7.1에서 수정 된 것으로, 존재이 진정한 MySQL의 버그. 즉, 일부 코드를 다시 작성해야하며 공백이 아닌 일부 구분 기호를 사용하여 mysql 버전에서 작동하도록해야합니다. < 5.7.1.

관련 문제