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
'code' 카테고리의 다른 글
클로저 XML 구문 분석 (0) | 2023.10.30 |
---|---|
각도 4에서 Excel로 내보내기 (0) | 2023.10.25 |
WebGL/Canvas에 대한 AngularJS (0) | 2023.10.25 |
Exception 클래스 없이 사용자 지정 예외를 처리하는 방법이 있습니까? (0) | 2023.10.25 |
wp_insert_post(사용자 정의 분류법 포함) (0) | 2023.10.25 |