웹 서버에 글쓴이를 추가하는 기능을 만들었다.
한글을 입력 후 insert 시도하면 저장이 안 된다.
sql문도 문제가 없고, 에러 메시지도 발생하지 않았다.
영어를 입력하면 저장이 잘 된다.
캐릭터 셋 문제인가보다.
Author 테이블의 캐릭터셋을 확인해보자.
mysql> SHOW CREATE TABLE author;
+--------+----------------------------------------------------+
| Table | Create Table |
+--------+----------------------------------------------------+
| author | CREATE TABLE `author` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`profile` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 |
+--------+----------------------------------------------------+
1 row in set (0.00 sec)
CHARSET=latin1 으로 되어있다..
utf8로 변경하자.
mysql> ALTER TABLE author CONVERT TO CHARACTER SET utf8;
Query OK, 6 rows affected (0.06 sec)
Records: 6 Duplicates: 0 Warnings: 0
다시 테이블 정보를 확인해보자
mysql> SHOW CREATE TABLE author;
+--------+----------------------------------------------------+
| Table | Create Table |
+--------+----------------------------------------------------+
| author | CREATE TABLE `author` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`profile` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |
+--------+----------------------------------------------------+
1 row in set (0.00 sec)
CHARSET=utf8로 변경되었다.
이제 다시 한글이 저장되는지 확인해보자.
저장이 되었다.
그럼 이제 mysql의 캐릭터 셋이 기본으로 utf8로 생성되도록 my.cnf 설정을 바꿔보자.
현재 데이터베이스의 상태를 확인한다.
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper
Connection id:
Current database:
Current user: @localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.29-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 15 days 3 hours 43 min 37 sec
--------------
Server characterset : latin1
Db characterset : latin1
으로 설정되어 있다. mysql을 설치 시 latin1이 기본값이다.
(우분투 aws ec2)터미널에서 /etc/my.cnf 파일을 열고 아래 문장을 추가한다.
[mysql]
default-character-set = utf8
[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server = utf8
collation-server = utf8_general_ci
[client]
default-character-set = utf8
mysql을 재실행 한다.
$ service mysqld restart
새로운 데이터베이스를 생성해 확인해보자.
mysql> CREATE DATABASE newdb;
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper
Connection id:
Current database: newdb
Current user: @localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.29-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 15 days 3 hours 43 min 37 sec
--------------
모두 utf8로 변경되었다.
끝.
'IT지식 > 개발' 카테고리의 다른 글
[Linux] awk 명령어 사용하기. awk '{print}' (0) | 2020.02.16 |
---|---|
[Linux] grep으로 검색한 문자열에서 특정 문자 추출. uniq 중복 제거 안될 때. (cut uniq sort ) (0) | 2020.02.14 |
[Linux] 원하는 디렉토리/파일/문자열 데이터를 추출해보자. (find | xargs grep) (0) | 2020.02.14 |
[GIT] 특정 파일만 받기 (0) | 2020.02.14 |
GIT 여러 브랜치로 서비스 하기 (0) | 2020.02.12 |