📑
scrapbook
  • Introduction
  • 1. Concept
  • 1.1 EAI
  • 1.2 ESB
  • 1.3 EAI v.s. ESB
  • 1.4 SOA
  • 1.5 RESTful
  • 1.6 Microservices
  • 1.7 Microservice v.s. SOA
  • 1.8 Maintain HTTP State
  • 1.8.1 Cookie
  • 1.8.2 Session
  • 1.9 Put, Add, and Set
  • 1.10 Public Key & Private Key
  • 1.11 Message Digest & Hash Function
  • 1.12 Diffie - Hellman Key Exchange
  • 1.13 About IoC
  • 1.14 About AOP
  • 1.15 Spring - Pros and Cons
  • 1.16 Spring - Prototype in Singleton
  • 1.17 HTTP v.s. SPDY
  • 1.18 HTTP/2
  • 1.19 Securing REST Services
  • 1.20 Conway's Law
  • 1.21 大型網站架構演化發展歷程
  • 1.22 Java Generics
  • 1.23 MySQL HA經驗談
  • 2. Questions & Solutions
  • 2.1 海底撈幾根針
  • 2.2 塞不進去
  • 3. Relational Database
  • 3.1 SQL Join Type
  • 3.2 SQL Injection
  • 3.3 MySQL CHAR v.s. VARCHAR
  • 4. NoSQL
  • 4.1 CAP Theorem, ACID v.s. BASE
  • 4.2 Two-Phase-Commit
  • 4.3 RDB v.s. NoSQL
  • 4.4 Structured, Unstructured and Semi-structured Data
  • 4.5 Shard v.s. Replica
  • 4.6 ArrayList v.s. LinkedList
  • 4.7 HashSet v.s. TreeSet
  • 4.8 HashMap v.s. TreeMap
  • 4.9 ArrayList v.s. Vector
  • 4.10 HashMap v.s. HashTable
  • 4.11 Statement, PreparedStatement and CallableStatement
  • 4.12 Overflow of Digits
  • X. JVM
  • X.1 JVM System Threads
  • X.2 Garbage Collection
Powered by GitBook
On this page

Was this helpful?

3.3 MySQL CHAR v.s. VARCHAR

首先來看一下這兩種資料型別的差別(可容忍的長度):

CHAR

VARCHAR

0~255

0~65535

從CHAR(5)的角度來看儲存:

Value

Actual Storage

'ap'

'ap ' (5 bytes, 這邊多存了3個空白)

'april'

'april' (5 bytes)

'april1'

'april' (5 bytes)

從VARCHAR(5)的角度來看儲存:

Value

Actual Storage

'ap'

'ap' (3 bytes, 1 byte存長度)

'apri'

'apri' (5 bytes)

'april'

'april' (6 bytes)

'april1'

'april' (6 bytes, 多的一個byte是存長度, 不是存字元'1')

-> 相較於CHAR, VARCHAR會多花1~2個byte去儲存長度(length prefix), 至於是多花1個還是2個byte, 則必須根據當前儲存資料之大小來判斷, 若資料少於255個char, 則只會使用1個byte去儲存長度, 反之, 若VARCHAR超過255個char的話, 則會使用2個bytes去儲存資料長度.

根據以上的比較, 試想以下情境: 若你有個欄位可能是要當flag用的(y/n), 則你可以選擇CHAR(1)而不是VARCHAR(1), 因為VARCHAR(1)會多用一個byte去儲存長度.

結論: 若資料是固定長度且長度在CHAR的容許範圍內的話, 就可以考慮使用CHAR, 反之則可用VARCHAR.

Previous3.2 SQL InjectionNext4. NoSQL

Last updated 5 years ago

Was this helpful?