우선 db는 행정안전부의 주소기반산업지원서비스 에서 받았다. db가 너무 큰 관계로 경기도 한정으로 하였다.
그런데 처음부터 파일 내용물이 이상하다.
file -bi로 인코딩을 확인해보니 iso 8859-1이란다. 그래서 일단 utf-8로 charset을 바꿨다.
iconv -c -t iso-8859-1 -t utf-8 원래파일명 > 변환된후 파일명
다음으로 테이블을 생성하였다.
CREATE TABLE `ggd_adress` (
관리번호 VARCHAR(25) NOT NULL,
일련번호 VARCHAR(3) NOT NULL,
법정동코드 VARCHAR(10),
시도명 VARCHAR(20),
시군구명 VARCHAR(20),
법정읍면동명 VARCHAR(20),
법정리명 VARCHAR(20),
산여부 VARCHAR(1) COMMENT '0:대지, 1:산',
지번본번_번지 INT DEFAULT 0,
지번부번_호 INT DEFAULT 0,
대표여부 VARCHAR(1) COMMENT '0:일반, 1:대표(지번)',
id INT AUTO_INCREMENT PRIMARY KEY
);
이후에 파일을 import하는 명령어는 다음과 같다.
LOAD DATA INFILE '/var/lib/mysql-files/adr.tmp' REPLACE INTO TABLE ggd
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n'
그와중에 에러가4가지나 발생했다.
첫번쨰 에러다.
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
그래서 로컬 데이터 로드를 활성화 해줬다.
set global local_infile=true;
근데 이것도 에러났다.
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
그래서 루트계정으로 다시 입력했더니 설정이 바뀌었다.
다시 IMPORT명령어 업력하니 다음 에러가 나왔다.
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
엑세스 제한이라고 한다.
특정 위치의 데이터만 접근할수 있다는거다.
그래서 그 위치도 찾았다.
SHOW VARIABLES LIKE 'secure_file_priv'
/var/lib/mysql-files/ 위치가 나와 그 위치에 다시 파일을 넣고 명령어를 실행했다.
ERROR 1406 (22001): Data too long for column '관리번호' at row 1
컬럼 길이가 짧다고 한다.
alter table ggd_adress modify 관리번호 varchar(50);
ERROR 1261 (01000): Row 1 doesn't contain data for all columns
다시말해 컬럼수가 안맞는다고 한다.
그런데 데이터 11개 + id하나 해서 총 12개로 컬럼수가 일치한다.
결국 그냥 새로운 테이블을 identitiy 컬럼 제외 11개로 만들고 import한 뒤 다시 identity컬럼을 만들었다.
부가정보 table도 만들었다.
CREATE TABLE `ggd_sub` (
관리번호 VARCHAR(25) NOT NULL,
행정동코드 VARCHAR(10),
행정동명 VARCHAR(20),
우편번호 VARCHAR(5),
우편번호_일련번호 VARCHAR(3),
다량배달처명 VARCHAR(40),
건축물대장_건물명 VARCHAR(40),
시군구_건물명 VARCHAR(40),
공동주책여부 VARCHAR(1) COMMENT '0:비공동주택, 1:공동주택'
);
LOAD DATA INFILE '/var/lib/mysql-files/subggd.txt' REPLACE INTO TABLE ggd_sub
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n'
원래 있던 로그인 table에 주소 관리번호를 저장할 컬럼까지 만들고 끝내겠다.
ALTER TABLE accounts ADD COLUMN address_num VARCHAR(25);
이제 db준비는 끝났다.
'프로그래밍 및 코딩 > PHP' 카테고리의 다른 글
회원가입_주소검색 페이지 작성 및 부모창에 전송 (0) | 2023.05.08 |
---|---|
게시판_목록 (0) | 2023.05.07 |
Login page 만들기_취약점 보완 (0) | 2023.04.13 |
Login page만들기_end (0) | 2023.04.09 |
Login page 만들기_로그인 및 세션 생성 (0) | 2023.04.09 |