DB/MySQL 21

[MariaDB] "UTF-8" 문자열 자료 입력 시, "Incorrect string value" 오류 발생 문제

문제점 및 증상 유튜브 자료를 분석하여 MariaDB에 입력하는 작업을 진행 중에 다음과 같은 오류를 만나게 되었습니다. File "C:\Dev\Python\Python310\lib\site-packages\mysql\connector\connection_cext.py", line 573, in cmd_query raise get_mysql_exception( mysql.connector.errors.DataError: 1366 (22007): Incorrect string value: '\xF0\x9F\x91\xA8\xE2\x80...' for column `YOUTUBE_DL`.`CLIP`.`title` at row 1 왠만한 자료들은 입력이 잘 되는데, 유독 이모지가 있는 자료에서만 위와 같은 오류..

DB/MySQL 2022.12.27

[MariaDB] "Incorrect definition of table mysql.event" 오류 해결 방법

도커를 이용하여 "MariaDB-10.4.15"를 운영 중이다가 오랜만에 "MariaDB-10.6.4"로 버전을 업그레이드 한 이후에, 로그에 다음과 같은 오류 기록이 남아 있었습니다. # ./start-mariadb.sh ======== [2021-08-22 14:08:32] ./start-mariadb.sh MariaDB 컨테이너 생성 ea3e5e778ec53f5b325420cb23e72c22d912b6e3328fd04151d2e9cc09705b89 [root@hbesthee-60337 www1]# docker logs mariadb 2021-08-22 5:08:34 0 [Note] /usr/bin/mysqld (server 10.6.4-MariaDB-debug) starting as process ..

DB/MySQL 2021.08.22

[MariaDB] Database를 백업하는 방법

개요 데이터베이스를 이용하면, 주기적인 백업은 선택이 아닌 필수적인 일입니다. MaraiDB에서 데이터베이스를 백업 받는 방법에 대하여 정리하여 둡니다. 기본적인 데이터베이스 백업 MaraiDB에서 데이터베이스를 백업을 위하여 "mysqldump" 명령을 이용합니다. 기본적으로 다음과 같이 필요한 데이터베이스에 대한 백업을 수행합니다. $ mysqldump -u dbuser -h 127.0.0.1 -ppassword --port=3306 DATABASE | gzip > DATABASE-20210627_10.sql.gz 각 옵션들에 대한 설명은 다음과 같습니다. -u : 데이터베이스 서버 로그인 계정명을 지정합니다. 위 예에서는 "dbuser" 계정으로 로그인합니다. -h : 데이터베이스 서버의 호스트 주..

DB/MySQL 2021.06.27

[MariaDB] 시간대 (time-zone) 설정하기

현재의 시간대를 확인하는 방법은 다음과 같습니다. MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | SYSTEM | +--------------------+---------------------+ 1 row in set (0.000 sec) 위와 같이 시간대가 "SYSTEM"으로 나오면, 기본적으로 "UTC" 시각을 기준으로 설정되어 있음을 나타냅니다. 그러면, 실제 한국시간 보다..

DB/MySQL 2021.04.26

[MaraiaDB] 식별 코드 (serial code) 생성 프로시저 만들기

"AUTO_INCREMENT" 속성을 갖는 일련번호는 중복되지 않아서, 테이블 내부의 Primary key를 만들때 사용하면 좋으나, 이를 API 등에 그대로 사용하면, 악용할 여지가 크기 때문에 각 레코드별로 외부에서 임의로 추측할 수 없는 값을 이용해야만 합니다. GUID() 혹은 UUID()가 좋은 방법이 될 수 있습니다. 외부에서 임의로 추측하여 찾을 수 없다는 장점이 있지만, 너무 길어서 외우는 것은 불가능할 정도고 적어 두기도 불편할 만큼 긴 문자열입니다. 4c302295-a2fe-11eb-8130-fa154e32888f fa154e32-888f-4c30-2295-a2fe11eb7132 그래서 저는 별도의 식별 코드를 위하여 UUID() 함수를 이용하여, 각 레코드별로 고유한 값이 할당되도록 ..

DB/MySQL 2021.04.24

[MaraiaDB] 저장 프로시저 (Stored procedure) 만들기

다음은 MariaDB 공식 문서에서 가져온 저장 프로시저 (Stored procedure) 문법입니다. CREATE [OR REPLACE] [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type type: Any valid MariaDB data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MO..

DB/MySQL 2021.04.23

임의의 숫자 데이터 다루기 ; RAND()

MariaDB에서 임의의 숫자를 얻기 위하여 RAND() 혹은 RAND(N) 함수를 이용합니다. RAND() 함수를 호출하면 0과 1사이의 임의의 실수를 반환합니다. 따라서 특정 숫자 사이의 정수를 구하려면 다음과 같이 FLOOR() 함수를 이용해야 합니다. FLOOR(min_value + RAND() * (max_value - min_value + 1)) 5에서 15 사이의 정수를 얻으려면 다음과 같이 호출합니다. SELECT FLOOR(5 + RAND() * 11); RAND(N)에서 N값은 초기화(seed)값으로, 동일한 초기화값을 입력할 경우 동일 임의의 숫자 셋을 순차적으로 얻을 수 있습니다. CREATE TABLE t (i INT); INSERT INTO t VALUES(1),(2),(3); ..

DB/MySQL 2021.04.07

테이블의 모든 컬럼명을 대문자/소문자로 변경하기

개발 유지보수 중에 특이하게도 테이블의 모든 컬럼명을 대문자로 작성한 데이터베이스로 작업된 소스를 수정할 일이 있었는데, DB 유지관리를 위하여 명명 규칙에 맞도록 테이블의 컬럼명을 모두 소문자로 변경하는 작업을 해야만 했습니다. 테이블을 SQL로 모두 백업 받은 후에, 컬럼명을 일일이 찾아 소문자로 변경하는 것은 엄두가 나지 않아서 손쉽게 할 수 있는 방법을 찾아 보았더니, 간단하게 다음과 같은 쿼리문을 활용하여 테이블의 컬럼명을 일괄 대문자 (UPPER) 또는 소문자 (LOWER)로 변경할 수 있었습니다. SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `', UPPER(COLUMN_NAME), '` ', COLUMN_TY..

DB/MySQL 2020.11.23

[MariaDB/Mysql] 중복되지 않은 데이터 입력하기

개요 특정 테이블에 레코드 입력시, 중복되지 않은 레코드만 입력하고자 하는 경우가 종종 있습니다. 본 문서에서는 MariaDB/Mysql 에서 테이블 내의 데이터와 중복되지 않은 레코드를 입력하는 두 가지 방법에 대하여 살펴 보도록 하겠습니다. 중복되지 않은 데이터 입력하기 특정 테이블에 중복되지 않도록 데이터를 입력하는 방법은 유일키(UNIQUE KEY or PK)가 존재할 경우와 그렇지 않은 경우에 대하여 처리하는 방법이 달라집니다. UNIQUE KEY가 존재하지 않는 경우 중복을 허용하지 않는 PRIMARY KEY 또는 UNIQUE KEY가 없는 경우에는 다음과 같이 "INSERT ... SELECT ..." 구문을 이용하여 중복 방지된 데이터 입력을 구현할 수 있습니다. CREATE TABLE I..

DB/MySQL 2020.03.17

[MariaDB/MySQL] 1월 30일의 1개월 후는 어떻게 계산할까?

만료기간 관련된 작업을 하던 중에 올해 윤달도 있고 해서, 1월 30일의 1달 후는 몇일일지 궁금해졌습니다. 그래서 다음과 같은 쿼리를 작성하여 실행해 보았습니다. \ MariaDB [(none)]> SELECT DATE_ADD('2020-01-30', INTERVAL 30 DAY), DATE_ADD('2020-01-31', INTERVAL 30 DAY), DATE_ADD('2020-01-30', INTERVAL 1 MONTH), DATE_ADD('2020-01-31', INTERVAL 1 MONTH); +-----------------------------------------+--------------------------------------..

DB/MySQL 2020.02.07
728x90