Spring data jpa에서 innodb 사용하기

새롭게 개인 프로젝트를 진행하면서 spring jpa를 사용하는중, 아래와 같은 에러 메세지를 만났다.

Issue

Specified key was too long max key length is 1000 bytes

원인
unique 조건을 걸은 column에서 인덱스가 만들어지는데, 이때 생성되는 인덱스의 크기가 현재 사용하는 engine에서 설정된 limit을 초과해서 발생한 오류.

해결
생성된 테이블을 조사하니, ‘MyISAM’ engine으로 작동중.

MyISAM과 InnoDB에서 인덱스 생성 관련하여 구동방식이 다르기에 (자세한건 타 포스팅 참조), InnoDB를 사용하도록 설정해야 했다.

그래서 Spring Boot properties에 아래의 값을 설정하였다.

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect

dialect를 설정하지 않고 mysql을 사용할경우, myisam을 default로 사용한다.

Comment and share

mysql collate

in Tech

Character Set & Collate

문자열 Datatype에는 문자셋(Character set)과 콜레이션(Collation) 속성이 있다.

문자셋은 각 문자가 컴퓨터에 저장될 때 어떠한 ‘코드’로 저장될지에 대한 규칙의 집합
Collation은 특정 문자셋에 의해 데이터베이스에 저장된 값들을 비교 검색하거나 정렬 등의 작업을 위해 문자들을 서로 비교할 때 사용하는 규칙들의 집합을 의미한다.

  • Charset은 server, database, table, column level에서 지정이 가능하다.

Character Sets & Collations in General

(https://dev.mysql.com/doc/refman/5.7/en/charset-general.html)

Character Set이란?

  • character set은 set of symbols & encodings.
  • 예를들어, 문자열 A,B,C,D가 있다.
    이때 각 문자열에 대해서 A=0, B=1, C=2, D=3 이라고 했을때,
    0, 1, 2, 3은 encoding 에 해당된다.

따라서 Symbol ‘A,B,C,D’와 encoding ‘0,1,2,3’을 합친것을 Character Set 이라 한다.

  • Character Set 조회
    show character set;

  • 서로 다른 char set들은 같은 collation을 가질 수 없다.

  • Char set은 default collation을 가지고 있다.
  • ASCII <= UNICODE
    ( ascii로 저장되어 있는 것들은 UNICODE로 전환하여도 손실이 없다.)
  • Server’s character set & collation :: character_set_server, collation_server variables

Client가 Server에 연결후 쿼리를 요청하면, client는 해당 쿼리를 ‘character_set_client’에 설정되어 있는 character set으로 전송한다.

get mysql system variable

  • select @@{system_variable}

서버가 connection을 통해서 statement를 받으면, 아래와 같은 일이 발생한다.

  • client로부터 받은 statement를 ‘character_set_client’에서 ‘character_set_connection’으로 변환한다.
  • ‘collation_connection’은 String 비교시에 중요하게 사용된다. 하지만 column에 설정되어 있는 collation이 더 상위이므로 이때에는 ‘collation_connection’은 무시된다.

Server가 Client에게 값을 반환할 때에는 ‘character_set_results’를 사용한다.

  • SET NAMES ‘CHARSET-NAME’
    이 쿼리는 해당 connection을 통해서 보내어지고 받을 데이터들의 charaset을 정의한다.
    character_set_client, character_set_results, character_set_connection 을 한번에 ‘CHARSET-NAME’으로 설정한다.

Comment and share

hexo tranquilpeak 설정하기

최근 hexo를 사용하여 github.io page를 꾸미던 중에 제대로 된 설정 안내가 없어서 정리해봅니다.
크게 Hexo 설정과, tranquilpeak 테마 설정, disqus 설정을 정리해보겠습니다.


Hexo 설정

  • plugin 설정
  • _config.yml 작성


Plugin 설정

hexo-auto-canonical

Install

1
npm install --save hexo-auto-canonical

Setup
테마path/layout/_partial/header.ejs를 수정한다.

1
<%- autoCanonical(config, page) %>





Sitemap

Install

1
npm install hexo-generator-seo-friendly-sitemap --save

Setup
theme’s _config.yml

1
2
sitemap:
path: sitemap.xml





rss

Install

1
npm install hexo-generator-feed --save

Setup
theme’s _config.yml

1
2
3
4
feed:
type: atom
path: atom.xml
limit: 20





robots.txt

Install

1
npm install hexo-generator-robotstxt --save

Setup
hexo’s _config.yml

1
2
3
4
robotstxt:
User-agent: '*'
Allow: /
Sitemap: /sitemap.xml





nofollow

Install

1
npm install hexo-autonofollow --save

Setup
theme’s _config.yml

1
2
nofollow:
enable: true









tranquilpeak 설정









Disqus 설정

1) Disqus 가입

2) ‘I want to install Disqus on my site’ 클릭

3) Website 생성

  • Website name 기입
  • Category 설정
  • Website Name에 적은 이름에 따라 input칸 아래에 shortname이 작성된다.
  • 이 shortname을 기억해두고 나중에 theme’s _config.yml에 적어야한다.

4) Select a plan
원하는 plan으로 설정한다.

(DOING…)
5)

Comment and share

  • page 1 of 1
Author's picture

Owen Q

author.bio


author.job


Seoul