code

MySQL 업데이트/직렬 데이터 손상 없이 교체

starcafe 2023. 10. 25. 23:27
반응형

MySQL 업데이트/직렬 데이터 손상 없이 교체

드루팔 8 사이트 전체에서 단어 하나에 대한 찾기/바꾸기를 실행하는 임무를 맡았습니다.제가 'WORD'와 바꿀 필요가 있는 'wORD'와 같은 혼성 대소문자입니다.

Drugpal 8은 MariaDB를 실행하고 있기 때문에 REGEXP_REFACE 기능은 매우 편리하게 사용할 수 있습니다.예:

UPDATE node__body SET body_value = REGEXP_REPLACE(body_value, 'wOrd', 'WORD') WHERE BINARY body_value REGEXP '[[:<:]]w[[:upper:]]rd[[:>:]]'

나는 BINORY를 사용하여 대소문자 민감도만 확인하고 "wOrd"의 인스턴스만 일치시킵니다.

프리앰블은 충분합니다. 일부 테이블은 Drupal 7 및 기타 많은 CMS 및 다양한 프레임워크에서 볼 수 있듯이 긴 문자열의 직렬 데이터를 저장하기 위해 TEXT 대신 BLOB를 사용합니다.제 질문은 코드를 통해 필터링하지 않고도 직렬화된 데이터에서 수동 업데이트/교체 기능을 처리할 수 있는지 여부입니다.

이 경우 직렬화된 필드의 길이는 변경되지 않으므로 문제없이 업데이트/교체를 실행할 수 있습니다.제가 아는 한 "word"와 "WORD"의 구별은 없습니다.하지만 고객이 갑자기 사이트 전체를 변경하고 싶어하는 경우가 많아 문자열 길이가 일치하지 않습니다.

직렬화를 처리하기 위해 유틸리티를 작성해야 하는 것이 불가피합니까?그렇다면 의견을 공유해 주실 수 있나요?

혹시 제가 자세히 설명해야 할 사항이 있으시면 말씀해 주시기 바랍니다.

감사해요.

"직렬화"라는 용어는 너무 광범위해서 귀하의 경우에 특정한 것을 제안할 수 없습니다.다양한 방법을 의미할 수도 있습니다.예를 들어, 블롭 데이터가 압축되어 있다고 상상해 보십시오. 따라서 어떤 교체도 전체를 망칠 것입니다.

따라서 직렬화 방식을 알고 있고 데이터가 1:1로 매핑되어 있다고 확신한다면 원시 텍스트와 동일한 방식으로 처리할 수 있습니다.

하지만 그렇지 않은 경우(그리고 그렇게 보이는 경우) 실제로 안전한 방법은 변경을 역직렬화하고 변경을 직렬화하는 것뿐입니다.

PS 다른 옵션은 전체 DB를 한 번만 역직렬화하는 것입니다.

언급URL : https://stackoverflow.com/questions/42259041/mysql-update-replace-serialized-data-without-corrupting-it

반응형