카테고리 없음

맥북에서 mariaDB 사용법

동곤일상 2025. 3. 8. 15:49
반응형

https://yeonnys.tistory.com/entry/맥북-MariaDB-설치하기-GUI-툴Sequel-Pro

 

맥북 MariaDB 설치하기 & GUI 툴(Sequel Pro)

* 2024년 3월 11일 기준, MariaDB 상에서 WITH 구문 사용 시 에러가 발생하기에, 필자는 MariaDB 대신 MySQL로 다시 설치를 하였다. GUI 툴 역시 Sequel Pro의 업데이트가 중단되어, 유사한 Sequel Ace로 다시 설치

yeonnys.tistory.com

 

이분의 블로그를 참고했음!

 


위 방법으로 들어가지지 않는다면

터미널에 

 

cd /opt/homebrew

해서 경로변경 후

mysql -u root -p 로

들어가

나의관리자비번을 입력해줘

나머지방법들은 위 블로그를 참고하면될것같음!

 

 

****

csv파일의 형식오류

(윈도우->맥 옮기면 엑셀이깨질확률이높음)

1️⃣ pandas 설치하기

터미널을 열고 다음 명령어를 실행하면 pandas를 설치할 수 있어.

bash
복사편집
pip3 install pandas

📌 설치 중 에러가 난다면?
만약 pip3: command not found 오류가 뜬다면, pip부터 설치해야 해.

bash
복사편집
python3 -m ensurepip --default-pip pip3 install pandas

설치가 끝나면 pandas가 잘 설치되었는지 확인해보자.

bash
복사편집
python3 -c "import pandas as pd; print(pd.__version__)"

✅ 버전 번호(예: 1.5.3 같은 숫자)가 출력되면 설치 완료!


2️⃣ pandas로 CSV 파일을 UTF-8로 변환

이제 pandas를 이용해서 깨진 한글을 해결해 보자.

bash
복사편집
python3 -c "import pandas as pd; df = pd.read_csv('/Users/donggon/Downloads/product/product.csv', encoding='utf-8', dtype=str); df.to_csv('/Users/donggon/Downloads/product/output.csv', encoding='utf-8', index=False)"

🚀 이 명령어를 실행하면 output.csv 파일이 깨지지 않은 UTF-8로 변환될 거야!

이제 output.csv 파일을 열어서 한글이 정상적으로 보이는지 확인해봐.


3️⃣ 추가 해결법: utf-8-sig로 변환 (Excel 호환)

만약 위 방식으로도 Sequel Pro에서 한글이 깨진다면, "UTF-8 with BOM" (utf-8-sig)로 변환하는 방법도 있어.

bash
복사편집
python3 -c "import pandas as pd; df = pd.read_csv('/Users/donggon/Downloads/product/product.csv', encoding='utf-8', dtype=str); df.to_csv('/Users/donggon/Downloads/product/output.csv', encoding='utf-8-sig', index=False)"

✅ 이렇게 하면 Windows Excel에서도 깨지지 않는 "UTF-8 with BOM" 형식의 CSV가 생성돼!

 

 


csv 가져왔지만 빈값을 null로 인식을하지못하고 가져오는 경우

 

1. 빈 값이 아니라 공백 또는 특수문자일 경우

CSV 파일 내에서 빈 값이 실제로 공백이나 특수 문자일 수 있습니다. 이런 경우, TRIM() 함수만으로는 해결되지 않을 수 있습니다. 공백은 빈 문자열로 취급되지 않기 때문에 빈 값과 공백을 동일하게 처리하려면 TRIM() 외에도 추가적인 처리가 필요합니다.

검증 방법:

  • SELECT 쿼리로 해당 컬럼의 값을 직접 확인하여 공백이나 특수 문자가 있는지 확인합니다.

예시:

SELECT remark, HEX(remark) FROM product LIMIT 10;

HEX() 함수는 문자열의 각각의 문자가 어떤 값을 가지고 있는지 확인할 수 있게 해 줍니다. 공백 문자나 특수 문자가 있을 경우, 해당 값이 20 (공백)으로 나올 수 있습니다.

  • 만약 공백이나 특수 문자가 포함되어 있다면, 이를 제거하는 방법을 사용해야 합니다.

2. 빈 문자열과 NULL 구분이 잘 안 되는 경우

CSV 파일 내에서 빈 문자열과 **NULL**은 서로 다릅니다. MariaDB에서 빈 문자열('')은 실제로 값을 가진 컬럼으로 취급되고, **NULL**은 아무 값도 없다고 취급됩니다. 이 두 가지를 혼동해서 처리할 수 있기 때문에 NULLIF()를 사용할 때 문제가 생길 수 있습니다.

NULLIF()가 제대로 작동하지 않는 경우는 빈 문자열과 실제 NULL 값을 구분해야 하기 때문입니다. 빈 문자열을 NULL로 바꾸는 것이 아니라, 공백이나 NULL인 경우를 처리하는 방법을 검토해야 합니다.

해결 방법:

LOAD DATA LOCAL INFILE '/Users/donggon/Downloads/product/newproduct.csv'
INTO TABLE product
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(remark, column2, column3, column4)
SET remark = NULLIF(TRIM(BOTH ' ' FROM remark), '');
  • TRIM(BOTH ' ' FROM remark): 공백을 양쪽에서 제거합니다.
  • NULLIF(remark, ''): 빈 문자열이 있는 경우 NULL로 변환합니다.

3. 데이터 검증

이 방법을 사용하기 전에, 실제로 CSV 파일 내에서 어떤 값들이 들어 있는지 확인하는 것이 중요합니다. 특히, 빈 문자열이 아니고 공백이 포함된 경우나 특수 문자가 포함되어 있는 경우, 그에 맞는 처리가 필요합니다.

4. 데이터 전처리 방법

CSV 파일을 텍스트 편집기로 열고, 공백을 제거하거나 특수 문자가 포함되어 있는지 확인합니다. 만약 빈 값이 공백 또는 특수 문자인 경우, 이를 제거한 후 다시 업로드하면 문제가 해결될 수 있습니다.

텍스트 편집기에서 처리 방법:

  1. CSV 파일을 텍스트 편집기로 열기 (TextEdit 또는 Sublime Text 등).
  2. 공백이나 특수 문자가 포함되어 있는지 확인하고, 필요하다면 수동으로 제거합니다.
  3. 저장할 때 UTF-8 인코딩으로 저장합니다.

5. 문제 해결을 위한 단계별 테스트

  • 첫 번째 테스트: SELECT HEX(remark) 쿼리를 사용하여 값이 실제로 어떤 문자(공백 등)가 포함되어 있는지 확인합니다.
  • 두 번째 테스트: TRIM()과 NULLIF()를 제대로 사용하는지 확인합니다.
  • 세 번째 테스트: 데이터를 직접 수정하여 CSV 파일을 다시 저장하고, 변환하는 방법을 시도합니다.

결론:

  1. 공백이나 특수 문자가 있는지 확인하기 위해 HEX()로 데이터를 검사합니다.
  2. **TRIM(BOTH ' ' FROM remark)**으로 공백을 제거한 후, 빈 문자열을 NULL로 변환하도록 처리합니다.
  3. CSV 파일의 데이터를 텍스트 편집기로 열고, 수동으로 공백을 제거하거나 특수 문자가 포함되어 있는지 확인합니다.

이 방법들을 통해 NULL 처리가 제대로 이루어질 수 있을 것입니다.

 

 

나와같은경우 인식하지못하는 문자의 데이터가 0D 였음

 

  1. Carriage Return 제거 (0D 문자를 처리):
    • TRIM() 함수로 공백뿐만 아니라 CR 문자도 제거해야 합니다. 0D(Carriage Return)는 줄바꿈 문자이므로, 이를 제거하기 위해 REPLACE()를 사용할 수 있습니다.
  2. 줄바꿈 문자(\r)를 NULL로 처리:
    • 0D 문자를 NULL로 처리하거나, TRIM()과 함께 제거하도록 하여 문제가 해결될 수 있습니다.

해결 SQL 쿼리

sql
복사편집
LOAD DATA LOCAL INFILE 'csv 파일 경로' 
INTO TABLE product 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS (remark, column2, column3, column4) 
SET remark = NULLIF(REPLACE(REPLACE(remark, '\r', ''), '\n', ''), '');
  • REPLACE(remark, '\r', ''): \r (Carriage Return)을 제거합니다.
  • REPLACE(..., '\n', ''): \n (Line Feed)을 제거합니다.
  • NULLIF(..., ''): 빈 문자열을 NULL로 처리합니다.