2017-10-03 1 views
0

내 생성 스크립트 다양한보기 및 테이블에 대한 내 CREATE 명령을 포함하는 SQL 파일이 일반 메모장 편집기에 비해 너무 큽니다. vim을 사용하고 있습니다. 그러나 모든 문자에는 그 사이에 ^@이 있습니다. 따라서 CREATE TABLE은 다음과 같습니다.Windows에서 vim을 사용하여 .sql 파일 구문 분석

^@C^@R^@E^@A^@T^@E^@ ^@T^@A^@B^@L^@E 

정상입니까? 기본적으로,이 파일에 실제로 원하는 스크립트는 단지 CREATE 개입니다. 특히, 나는 그 안에 [dbo].[v_agent이있는 라인을 찾고있다. grep 명령을 이해하지만 명령을 실행하기를 기다리고 앉아 있고 시간을 낭비하고 있는지 알고 싶습니다.

+1

어떻게 스크립트를 생성 했습니까? 출력을위한 인코딩을 설정하는 ScriptingOptions ... 옵션이 있습니다 (https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scriptingoptions.encoding.aspx).하지만 저는 아닙니다. SSMS 옵션에 노출 된 것을 볼 수 있습니다. 내 의문은 파일이 UTF-16이고 vim이 UTF-8을 예상 (또는 해석)하고 있다는 것입니다. –

+0

Tasks -> Generate Scripts를 사용했습니다. –

+1

약간의 연구를했는데, MS에 대한 오랜 요청 인 것 같습니다. 적어도 다른 인코딩을 선택할 수있는 옵션을 사용자에게 제공하는 것입니다. ScriptingOptions.Encoding을 UTF-8로 설정할 수있는 PowerShell 스크립트에서 손을 사용해보십시오. 그렇지 않으면 아래에 제공된 vim 팁을 좋아합니다. –

답변

3

최신 MS Windows 프로그램 및 유틸리티 (예 : SQL Server)는 UTF-16 LE (작은 끝) 문자 인코딩을 사용하여 텍스트 파일을 만듭니다.

기본적으로 grep과 같은 Unix 유틸리티는 텍스트 파일 인 것으로 해석하지 않고 대신 이진 파일 (바이트 스트림)으로 처리합니다. 당신이 유닉스 에뮬레이터 (예를 들어, Cygwin에서)를 실행하는 경우


iconv 도구는 는 UTF-8, 예를 들어, 같은 다른 인코딩이 변환하는 데 사용할 수 있습니다

:set encoding=utf8 
:e ++encoding=utf16le 

첫 번째 명령은 만드는 데 사용됩니다 : 당신은 이미 당신이, 당신은 다시 열 수는이 빔 명령을 사용하여 빔에 열려있는 파일이 있음을 언급 한 이후

iconv -f utf16le -t utf8 in.sql > out.sql 

파일이 Vim 버퍼에로드 될 때 유니 코드 문자가 올바르게 표현 될 수 있습니다. 기본 인코딩은 일반적으로 UTF-8로 설정되므로 필요하지 않습니다.

Vim은 파일을 UTF-16LE로 인코딩 된 것으로 자동 인식하지 않으므로 두 번째 명령이 편집을 위해 파일을 다시 엽니 다. 파일을 구성하는 바이트 스트림을 해석하는 데 사용해야하는 문자 인코딩을 지정해야합니다. 자세한 내용은 http://vim.wikia.com/wiki/Reloading_a_file_using_a_different_encoding

을 참조하십시오. 파일이 Vim 버퍼에 올바르게로드되었으므로 fileencoding 옵션을 파일을 저장할 문자 인코딩으로 설정할 수 있습니다.