mysql
위키피디아에는 이렇게 소개하고 있다
MySQL is an open-source relational database management system. Its name is a combination of "My", the name of co-founder Michael Widenius's daughter My, and "SQL", the acronym for Structured Query Language
mysql은 데이터 베이이스 관리 프로그램이다. 오픈 소스이고 널리 사용하는데다 오라클이 인수한 후에 꾸준히 관리도 잘 되고 있어서 점유율이 높은 프로그램이다.
우리나라에서는 대체로 마이에스큐엘
이라고 하는 읽는데 영미권에선 마이씨퀄
이라고 읽는 사람도 많다. 왜 그런가했더니 옛날에 SQL이란 걸 처음 만들 때 SEQUEL이라는 이름으로 부르려고 했었으나 전혀 다른 분야에서 이미 상표권 등록을 한 상태라 SQL로 이름을 붙이고 에스큐엘
이라고 읽기로 했다고 한다. 따라서 mysql도 마이에스큐엘
이라고 읽어주길 선호하는데, 부르기 편한대로 부르라고 한다.
local host
마이에스큐엘을 이용하면 집에 있는 컴퓨터를 서버처럼 이용할 수 있다. 그렇게 세팅하는 방법은 나중에 따로 정리하기로 하고, 여기서는 사용중에 나온 max length 문제 해결 과정을 남기려고 한다
max length
"message": "An exception is raised during the commit. This typically happens due to invalid data in the commit, e.g. exceeding max length. ",
이런 오류 메세지가 발생했다. 왜 그런지 재빨리 chatgpt에게 물어봤더니 이렇게 대답했다
The error message "Data too long for column 'value_json' at row 1" indicates that the data you're trying to store in a value_json column of your database exceeds the maximum length allowed for that column.
즉 내가 저장하려고 하는 column 'value_json'이 받을 수 있는 길이 보다 저장하고자 하는 정보의 길이가 더 길다는 거였다. 저장하고자 하는 정보는 numpy array 였기 때문에 충분히 그럴 수 있겠다 싶었다. 따로 찾아서 글자수를 세보니 4만 자가 넘었다. 그런데 그렇다고포기할 순 없었다. chatgpt가 바로 바로 대답을 내놓진 않았지만 결론적으로 2가지 해결책이 있었다.
- 배열을 압축해서 저장
- 칼럼 속성 변경
encode
첫번째 방법은 저장하고자 하는 정보를 만져서 mysql이 원하는 형태로 만들어주는 거다. 이 방법의 장점은 데이터베이스에 변경 권한이 없어도 진행할 수 있다는 점이다. 그러나 과정이 한번 더 생겨 번거롭고 나의 경우처럼 결국 압축을 해도 길이를 초과할 수 있다는 단점이 있다.
필요에 따라 여러 방법으로 할 수 있는데 핵심은 길이를 줄이기 위해 압축한다는 점이다. 아래는 chatgpt가 추천했던 zlib을 이용한 압축이다.
import zlib
import base64
compressed_data = zlib.compress(serialized_data.encode()) # Compress the JSON string
encoded_data = base64.b64encode(compressed_data).decode() # Encode bytes to Base64 string
zlib으로 데이터를 이진 데이터로 만든다.
그러나 내 칼럼은 바이너리 데이터를 받을 수 없다. 따라서 base64로 다시 문자열로 만들어 줘야했다.
너무 지저분한 방법이었다. 실험해봤으나 어차피 길이를 초과했다. 그래서
alter
칼럼 속성을 변경하기로 했다. 나는 mysql로 내 컴퓨터에서 서버처럼 쓰고 있으니 칼럼 속성 변경은 코드 한줄이면 할 수 있다.
ALTER TABLE your_table_name
MODIFY COLUMN column_name new_data_type(new_length);
대략 이런 코드를 쓰면 된다
ALTER TABLE your_table_name
MODIFY COLUMN value_json VARCHAR(10000);
숫자면 이렇게 쓰거나
ALTER TABLE your_table_name MODIFY COLUMN value_json MEDIUMTEXT;
문자 text 면
TEXT: A TEXT column can hold up to 65,535 bytes of data, which includes text and any potential character encoding overhead.
MEDIUMTEXT: For larger text, a MEDIUMTEXT column can store up to 16,777,215 bytes.
LONGTEXT: The largest is LONGTEXT, with a maximum length of 4,294,967,295 bytes.
이 중에서 원하는 걸로 정해서 바꿔주면 된다.
이걸 하나하나 stackoverflow 돌아다니면서 찾지 않아도 되고. 참 chatgpt에 고마울 따름이다.
'아카이브' 카테고리의 다른 글
cs50x 8주차를 넘어가며 (2) | 2024.10.10 |
---|---|
chatcpt4로 custom gpt 만들기 (0) | 2023.11.14 |
리스트 순서 섞기 random.shuffle (0) | 2023.11.14 |
os와 pathlib으로 길찾기 파일경로 알려주기 (0) | 2023.11.14 |
판다스 데이터 저장 방법 및 파일 종류와 그 차이 (0) | 2023.11.11 |