2017-11-07 2 views
2

Ethereum API를 사용하고 있습니다. api의 정보를 mysql 테이블에 저장하려고한다. 나는이 문자를 단지 VARCHAR 컬럼을 사용하고데이터베이스에 16 진수 및 16 진수를 저장하는 데 가장 적합한 데이터 유형

0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be 
0x1d80982502f3bb75654df13aa32bbd5ac9cab7d6 
0xaf13bbdbe1ff53c2df7109a53c217320d2d76ee2 
... 

: 같은

주소 데이터 보인다. 더 나은 데이터 유형이 있습니까? 나는 아마 varbinary를 생각하고 있지만 어떤 이점이 있는지 나는 모른다. 단점은 내가 HEX()와 UNHEX()를해야하므로 SQL 코드가 더 복잡하다는 것입니다.

답변

1

이점 CHAR : 간단 함.

이점 BINARY : 행당 22 바이트를 절약 할 수 있습니다.

제 생각에 복잡성 증가는 최소 백만 행 데이터베이스가 아니라면 공간 절약의 가치가 없습니다. 그럼에도 불구하고 아마 나는 걱정하지 않을 것이다.

두 경우 모두 변수가 아닌 고정 길이 열을 사용하여 1 바이트 또는 2 바이트를 절약 할 수 있습니다 (DB 구조 최적화를 향상시킬 수 있음). 나를 위해

2

텍스트와 바이너리를 선택할 필요가 존재하는 특정 유형 :

CHAR (40) : (charset is not important here)

  • 프로 : 단순
  • 단점 : 당신은 더 많은 공간이 필요하지 디스크 (~ + 100 %)
  • 단점 : 유효하지 않은 데이터 저장 non hexa 데이터

BINARY (20) :

  • 프로 : 공간 디스크를 감소
  • 프로 : 당신은 유효하지 않은 데이터를
  • 단점을 저장할 수 없습니다 : 당신은 헥사를 참조해야하는 경우 (변환 필요 값) 나를 위해

데이터 일관성 가장입니다 중요한 점 : 나는 바이너리 옵션을 선호한다.

  • unhex ('FF') == unhex ('FF')하지만 'FF'<> 당신이 할 수있는 텍스트 'FF'('ZZ')에서 오류가 발생을 unhex 저장하려고
  • )

는 또한/unHexHex은 매우 간단한 함수를

힌트입니다 : 당신은 BINARY 컬럼에 데이터를 저장하고 easly 헥사 값을보기 위해 hexa보기를 만들 수 있습니다.여기

http://rextester.com/SEV11235

+0

덕분 진 영역에 데이터를 저장하는 예. 공간을 절약하기 위해 사용해야하는 인코딩/데이터 정렬이 중요하다고 생각하십니까? – Yada

+0

Hexa는 [0-9] [af] 문자 만 포함합니다 : 인코딩/데이터 정렬이 중요하지 않습니다 (즉, UTF8은 특정 비 ASCII 문자 "ee etc ..."에 몇 바이트를 사용합니다) – Indent

+0

그래서 UTF8을 사용해서는 안됩니다. latin1? – Yada