csv 엑셀파일로 db에 데이터를 올린 후 그누보드 검색에서 한글이 검색되지 않음
본문
1. csv 파일을
2. 엑셀파일로 만들어 db에 데이터를 올린 후
3. 그누보드 검색에서 한글이 검색되지 않습니다. (혹 게시판 검색창에서 한글을 보내면 mysql 이 인식하지 못하는 걸 까요)
db는 utf8-general-ci 로 되어 있습니다. php 코딩 또는 mysql 설정을 어떻게 바꾸면 해결 될까요
영어는 검색이 잘 됩니다.
게시판에서 검색으로 한글을 보내면, 한글을 그누보드가 인식하지 못하는 것 같은데, 그누보드 어디를 수정해야 한글 검색이 될까요.
답변 1
DB 및 PHP의 인코딩 설정 일치와 그누보드 검색 로직의 한글 처리 확인이 필요합니다.
먼저 MySQL 데이터베이스 테이블이 utf8_general_ci로 설정되었는지 확인하고,
PHP 파일과 웹서버의 문자셋이 UTF-8로 설정되었는지 검증해야 합니다.
이후, 그누보드의 검색 쿼리가 적절히 처리되고 있는지,
한글 입력값이 MySQL에 정상 전달되는지 점검합니다.
- CSV 파일을 생성할 때 인코딩이 UTF-8이 아닌 경우,
한글 데이터가 DB로 저장되는 과정에서 깨질 가능성이 있음.
- 데이터베이스 또는 테이블의 문자셋이 utf8-general-ci로 설정되어 있다면
한글 저장은 가능하나, PHP와의 문자셋 설정 불일치로 인해 검색이 실패할 수 있음.
- 검색 시 한글 입력값($stx)이 MySQL 쿼리로 전달되는 과정에서
인코딩 문제가 발생할 가능성이 있음.
1. CSV 파일을 UTF-8로 저장:
- 엑셀에서 "다른 이름으로 저장"을 선택.
- - "CSV UTF-8(쉼표로 분리)" 형식으로 저장.
- 저장 후 텍스트 편집기로 열어 한글이 정상적으로 보이는지 확인.
2. MySQL 데이터베이스와 테이블 설정을 확인:
SHOW VARIABLES LIKE 'character_set%';
- character_set_client, character_set_connection, character_set_database,
character_set_results, character_set_server 모두 utf8로 설정되어 있어야 함.
- 테이블 및 컬럼 문자셋 확인:
SHOW FULL COLUMNS FROM table_name;
- 테이블 또는 컬럼 문자셋 변경:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
3. PHP와 MySQL 연결 설정 확인
- PHP 코드에서 MySQL 연결 시 문자셋을 utf8로 설정:
mysqli_set_charset($conn, 'utf8');
- PHP 파일의 Content-Type 헤더를 UTF-8로 설정:
header('Content-Type: text/html; charset=utf-8');
4. 그누보드 검색 로직 확인 및 수정
- /bbs/search.php에서 검색어 처리 부분을 확인:
- - 검색어가 한글로 입력될 경우 urlencode나 urldecode 처리가 필요할 수 있음.
- 코드 수정 예시
// UTF-8 설정
mysqli_set_charset($conn, 'utf8');
// 한글 검색어 처리
$stx = mysqli_real_escape_string($conn, urldecode(trim($_GET['stx'])));
// 검색 쿼리
$sql = "SELECT * FROM board WHERE subject LIKE '%$stx%' OR content LIKE '%$stx%'";
SELECT * FROM table_name WHERE column_name LIKE '%한글%';