2014-02-25 3 views
0

여기에 제 코드가 있습니다.mysql의 키보드가 아닌 문자를 모두 선택하여 바꾸십시오.

SELECT * 
FROM `accounts` 
WHERE NOT name REGEXP '^[[.NUL.]-[.DEL.]]*$' 

모든 테이블의 모든 비 키보드 문자를 공백으로 바꿔야합니다.

누군가가 실제로이 작업을 수행 할 수 있기를 바랍니다.

+2

당신을 "비 키보드"문자는 "비 인쇄"문자를 참조하고, 당신이 리눅스에 있는지, 당신은 mysqldump를 조합하여이 작업을 수행 할 수 있습니다 그래서 같이 나오지에 의해 가정

"키보드가 아닌"의미를 분명히해야합니까? –

+0

비 키보드는 키보드에 해당 키가없는 ASCII 코드를 의미합니다. 샘플은 취소 인 CAN과 매체의 끝인 EM입니다. –

+0

예, 이해했습니다. 내가 분명히 말했을 때, 나는 키보드에 대해 더 많은 것을 의미했다. ASCII 키보드와 키보드에있는 특수 문자를 의미합니까 아니면 인쇄 가능한 모든 문자를 의미합니까? 키릴 자판 키보드는 어때? –

답변

0

SQL에서는이 작업을 쉽게 수행 할 수 없습니다.

가장 직접적인 방법은 데이터베이스의 논리 백업을 사용하고 sed 또는 perl (또는 문자열 대체를 수행하는 유사한 도구)을 사용하고 데이터를 다시 가져 오는 것입니다.

데이터를 테스트 데이터베이스 (또는 적어도 테스트 스키마)로 가져 와서 데이터를 손상시키지 않도록 테스트해야합니다.

# dump your schema and data 
mysqldump --single-transaction your_schema > /tmp/your_schema.sql 

# copy the dump file and replace all non-printable characters with a space 
sed -e 's/[^[:print:]]/ /g' /tmp/your_schema.sql > /tmp/your_schema_test.sql 

# create an empty test schema to test the import 
mysqladmin create your_schema_test 

# import the data into the test schema 
mysql -f your_schema_test < /tmp/your_schema_test.sql 
관련 문제