Comments(주석)

MySQL Server는 세 가지 주석 스타일을 지원합니다.

  • #(샵)
  • --(이중대시) : MySQL에서 이중 대시(--) 주석은 두 번째 대시 뒤에 최소한 하나의 공백이나 제어 문자(공백, 탭, 개행 문자 등)가 와야 합니다.
  • /* */ : 이 구문을 사용하면 주석을 여러 줄에 걸쳐 확장할 수 있습니다.

다음 예에서는 세 가지 주석 스타일을 모두 보여줍니다.

mysql> SELECT 1+1;     # This comment continues to the end of line
mysql> SELECT 1+1;     -- This comment continues to the end of line
mysql> SELECT 1 /* this is an in-line comment */ + 1;
mysql> SELECT 1+
/*
this is a
multiple-line comment
*/
1;

중첩 주석은 지원되지 않습니다.

MySQL Server는 C 스타일 주석의 특정 변형을 지원합니다. 다음 형식의 주석을 사용하여 MySQL 확장을 포함하지만 이식 가능한 코드를 작성할 수 있습니다.

/*! MySQL-specific code */

이 경우 MySQL 서버는 다른 SQL 문과 마찬가지로 주석 내의 코드를 구문 분석하고 실행하지만 다른 SQL 서버는 무시합니다. 

예를 들어, MySQL Server는 STRAIGHT_JOIN 키워드를 인식하지만 다른 서버는 인식하지 않습니다.

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

문자 뒤에 버전 번호를 추가하면 ! MySQL 버전이 지정된 버전 번호보다 크거나 같은 경우에만 주석 내의 구문이 실행됩니다. 다음 주석 의 KEY_BLOCK_SIZE키워드는 MySQL 5.1.10 이상의 서버에서만 실행됩니다.

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

위에서 설명한 주석 구문은 mysqld 서버가 SQL 문을 구문 분석하는 데 적용됩니다. 또한 mysql 클라이언트 프로그램은 명령문을 서버로 보내기 전에 구문 분석을 수행합니다. 서버와 mysql 클라이언트 파서의 차이점에 대한 정보는 "mysql 클라이언트" 에서 참조합니다.

/*!12345 ... */ 형식의 주석은 서버에 저장되지 않습니다. 이 형식을 사용하여 stored  procedure에 주석을 달면 주석이 procedure body 문에 유지되지 않습니다.

C 스타일 주석 구문의 또다른 형태는 옵티마이저 힌트를 지정하는 데 사용됩니다.

SELECT /*+ BKA(t1) */ FROM ... ;

자세한 내용은 "Optimizer 힌트" 를 참조합니다.

 

'MySQL' 카테고리의 다른 글

MySQL - Delimiter  (0) 2023.04.10
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
MySQL Workbech runtimeError 발생 시  (0) 2022.02.23
MySQL5.7 character set 변경하기  (0) 2022.02.22

MySQL Workbench 프로그램에서

Administration 항목의 일부 메뉴 클릭 시 아래와 같이 chcp 관련 RuntimeError 가 발생합니다.

에러 조치 방안으로 PATH에 C:\Windows\System32 경로를 추가하라는 메시지가 뜨는데 PATH에 경로를 추가해도 동일한 오류가 발생합니다.

 

유니코드를 지원하지 않는 프로그램용 언어

이 설정은 유니코드를 지원하지 않는 프로그램에서 텍스트를 표시할 때 사용되는 언어를 제어한다고 설명되어 있습니다. 이 언어를 기존 한국어(대한민국)에서 영어(미국)으로 변경한 후, MySQL Workbench가 설치된 컴퓨터를 재기동하면 위에서 발생했던 에러가 발생하지 않습니다.

 

변경 방법은 [윈도우키] - [설정(톱니바퀴 모양)] 을 클릭하면 아래와 같이 윈도우 설정 화면이 나타납니다. [시간 및 언어] 메뉴를 클릭합니다.

아래 화면이 나타나면 좌측의 [언어] 메뉴를 클릭한 후 우측 상단의 [관리 언어 설정] 메뉴를 클릭합니다.

 

[관리자 옵션] 탭에서 [시스템 로캘 변경] 버튼을 클릭한 후 한국어(대한민국)를 영어(미국)으로 변경합니다. 변경 후 컴퓨터를 재부팅하면 오류없이 MySQL Workbench 의 기능을 사용할 수 있습니다.

 

 

 

'MySQL' 카테고리의 다른 글

MySQL - Delimiter  (0) 2023.04.10
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
mysql /*! */ 의미  (0) 2022.03.02
MySQL5.7 character set 변경하기  (0) 2022.02.22

MySQL 설치 후 character set과 collation을 변경하는 방법에 대해 설명합니다.

설치환경

- Windows 10

- Mysql 5.7.37

 

MySQL 설치 시 캐릭터셋을 명시적으로 설정하지 않으면 MySQL 5.7 이하는 latin1, MySQL 8은 utf8mb4가 기본 캐릭터셋이 됩니다. 현재 character set 확인은 mysql 로 접속한 후 status 명령어나 show varaiables, 시스템 테이블 조회 등으로 알 수 있습니다.

 

현재 설정값 확인

1)  status 명령어

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.37, for Win64 (x86_64)

Connection id:          19
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter:        ;
Server version:         5.7.37-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    euckr
Conn.  characterset:    euckr
TCP port:               3306
Uptime:                 23 hours 35 min 40 sec

 

2) show variables

mysql> show global variables like 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | euckr                                                   |
| character_set_connection | euckr                                                   |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | euckr                                                   |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+

 

3) select system table

mysql> select * from performance_schema.global_variables where variable_name like 'character%';
+--------------------------+---------------------------------------------------------+
| VARIABLE_NAME            | VARIABLE_VALUE                                          |
+--------------------------+---------------------------------------------------------+
| character_set_client     | latin1                                                  |
| character_set_connection | latin1                                                  |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | latin1                                                  |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+

 

설정값 변경

1. 환경파일(my.ini) 수정

별도로 설정파일의 설치위치를 지정하거나 변경하지 않은 경우,

윈도우에서 my.ini 파일은  C:\ProramData\MySQL\MySQL Server 5.7 하위에 생성됩니다.

참고로, linux인 경우에는 RHEL/CentOS는  /etc/my.cnf 이고 Ubuntu 는 /etc/mysql/mysql.conf.d/mysqld.cnf 입니다.

이 파일을 열어서 아래 내용을 추가합니다.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

이 설정은 서버 전체에 적용되며 신규로 생성한 데이터베이스와 해당 데이터베이스에 만드는 테이블의 기본값으로 적용됩니다.

 

utf8_general_ci

collation에서 ci는 case insensitive를 나타냅니다. 즉 영문의 대/소문자를 구분하지 않습니다. 대/소문자를 구분하여 정렬이 필요한 경우에는 utf8_bin 을 사용합니다. 예를 들어 order by 구문을 사용할 경우 collation을 ci 로 설정한 경우에는 대.소문자를 구분하지 않고 정렬합니다. a,A,B,b 라는 데이터가 있다면 ordering을 하게되면 대.소문자를 구분하지 않기 때문에 a,A,B,b 등으로 출력됩니다. 반면 utf8_bin을 적용하게 되면 a,b,A,B 식으로 정렬됩니다.

 

MySQL이 실행되고 있으면 재기동을 해줍니다.

MySQL에 접속하여 위의 3가지 방법 중 하나로 variable을 조회하여 정상적으로 수정이 되었는지 확인합니다.

 

추가로, 기존에 생성된 데이터베이스는 변경되지 않으므로 characterset과 collcation을 변경해줘야 합니다.

아래와 같은 명령어를 수행하면 기존에 생성했던 데이터베이스의 characterset과 collcation 이 변경됩니다. 아래 dbname 대신에에 변경하고 하는 DB를 입력하면 됩니다.

mysql> ALTER SCHEMA `dbname` DEFAULT CHARACTER SET utf8  DEFAULT COLLATE utf8_bin ;

 

 

 

 

'MySQL' 카테고리의 다른 글

MySQL - Delimiter  (0) 2023.04.10
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
mysql /*! */ 의미  (0) 2022.03.02
MySQL Workbech runtimeError 발생 시  (0) 2022.02.23

+ Recent posts