Cara menggunakan varbinary max mysql

Setelah banyak berpikir dan meneliti menemukan satu jawaban yang sangat membantu dalam mencapai apa yang diperlukan. Ini adalah skrip Perl dan tautan referensi

http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html

#!/usr/bin/Perl
use strict;
$| = 1;

my %DataType = (
"TINYINT"=>1, "SMALLINT"=>2, "MEDIUMINT"=>3, "INT"=>4, "INTEGER"=>4, "BIGINT"=>8,
"FLOAT"=>'$M<=24?4:8', "DOUBLE"=>8,
"DECIMAL"=>'int(($M-$D)/9)*4+int(((($M-$D)%9)+1)/2)+int($D/9)*4+int((($D%9)+1)/2)',
"NUMERIC"=>'int(($M-$D)/9)*4+int(((($M-$D)%9)+1)/2)+int($D/9)*4+int((($D%9)+1)/2)',
"BIT"=>'($M+7)>>3',
"DATE"=>3, "TIME"=>3, "DATETIME"=>8, "TIMESTAMP"=>4, "YEAR"=>1,
"BINARY"=>'$M',"CHAR"=>'$M*$CL',
"VARBINARY"=>'$M+($M>255?2:1)', "VARCHAR"=>'$M*$CL+($M>255?2:1)',
"ENUM"=>'$M>255?2:1', "SET"=>'($M+7)>>3',
"TINYBLOB"=>9, "TINYTEXT"=>9,
"BLOB"=>10, "TEXT"=>10,
"MEDIUMBLOB"=>11, "MEDIUMTEXT"=>11,
"LONGBLOB"=>12, "LONGTEXT"=>12
);

my %DataTypeMin = (
"VARBINARY"=>'($M>255?2:1)', "VARCHAR"=>'($M>255?2:1)'
);

my ($D, $M, $S, $C, $L, $dt, $dp ,$bc, $CL);
my $fieldCount = 0;
my $byteCount = 0;
my $byteCountMin = 0;
my @fields = ();
my $fieldName;
my $tableName;
my $defaultDbCL = 1;
my $defaultTableCL = 1;
my %charsetMaxLen;
my %collationMaxLen;

open (CHARSETS, "mysql -B --skip-column-names information_schema -e 'select CHARACTER_SET_NAME,MAXLEN from CHARACTER_SETS;' |");
%charsetMaxLen = map ( ( /^(\w+)/ => /(\d+)$/ ), <CHARSETS>);
close CHARSETS;

open (COLLATIONS, "mysql -B --skip-column-names information_schema -e 'select COLLATION_NAME,MAXLEN from CHARACTER_SETS INNER JOIN COLLATIONS USING(CHARACTER_SET_NAME);' |");
%collationMaxLen = map ( ( /^(\w+)/ => /(\d+)$/ ), <COLLATIONS>);
close COLLATIONS;

open (TABLEINFO, "mysqldump -d --compact ".join(" ",@ARGV)." |");

while (<TABLEINFO>) {
chomp;
if ( ($S,$C) = /create database.*?`([^`]+)`.*default\scharacter\sset\s+(\w+)/i ) {
$defaultDbCL = exists $charsetMaxLen{$C} ? $charsetMaxLen{$C} : 1;
print "Database: $S".($C?" DEFAULT":"").($C?" CHARSET $C":"")." (bytes per char: $defaultDbCL)\n\n";
next;
}
if ( /^create table\s+`([^`]+)`.*/i ) {
$tableName = $1;
@fields = ();
next;
}
if ( $tableName && (($C,$L) = /^\)(?:.*?default\scharset=(\w+))?(?:.*?collate=(\w+))?/i) ) {
$defaultTableCL = exists $charsetMaxLen{$C} ? $charsetMaxLen{$C} : (exists $collationMaxLen{$L} ? $collationMaxLen{$L} : $defaultDbCL);
print "Table: $tableName".($C||$L?" DEFAULT":"").($C?" CHARSET $C":"").($L?" COLLATION $L":"")." (bytes per char: $defaultTableCL)\n";
$tableName = "";
$fieldCount = 0;
$byteCount = 0;
$byteCountMin = 0;
while ($_ = shift @fields) {
if ( ($fieldName,$dt,$dp,$M,$D,$S,$C,$L) = /\s\s`([^`]+)`\s+([a-z]+)(\((\d+)(?:,(\d+))?\)|\((.*)\))?(?:.*?character\sset\s+(\w+))?(?:.*?collate\s+(\w+))?/i ) {
$dt = uc $dt;
if (exists $DataType{$dt}) {
if (length $S) {
$M = ($S =~ s/(\'.*?\'(?!\')(?=,|$))/$1/g);
$dp = "($M : $S)"
}
$D = 0 if !$D;
$CL = exists $charsetMaxLen{$C} ? $charsetMaxLen{$C} : (exists $collationMaxLen{$L} ? $collationMaxLen{$L} : $defaultTableCL);
$bc = eval($DataType{$dt});
$byteCount += $bc;
$byteCountMin += exists $DataTypeMin{$dt} ? $DataTypeMin{$dt} : $bc;
} else {
$bc = "??";
}
$fieldName.="\t" if length($fieldName) < 8;
print "bytes:\t".$bc."\t$fieldName\t$dt$dp".($C?" $C":"").($L?" COLL $L":"")."\n";
++$fieldCount;
}
}
print "total:\t$byteCount".($byteCountMin!=$byteCount?"\tleast: $byteCountMin":"\t\t")."\tcolumns: $fieldCount\n\n";
next;
}
Push @fields, $_;
}
close TABLEINFO;

Terima kasih semua atas bantuannya.

Tipe data kolom yang menentukan nilai apa yang dapat dimiliki kolom: integer, character, money, date and time, binary dan seterusnya.

Section Artikel

  • 1 Tipe Data SQL
  • 2 Jenis Data MySQL (Versi 8.0)
    • 2.1 Tipe data string:
    • 2.2 Tipe data numerik:
    • 2.3 Tipe data Date and Time:
  • 3 Tipe Data SQL Server
    • 3.1 Tipe data string:
    • 3.2 Tipe data numerik:
    • 3.3 Tipe data Date dan Time:
    • 3.4 Tipe data lainnya:
  • 4 Tipe Data Microsoft Access

Tipe Data SQL

Setiap kolom dalam tabel database harus memiliki nama dan tipe data.

Pengembang SQL harus memutuskan tipe data apa yang akan disimpan di dalam setiap kolom saat membuat tabel. Tipe data adalah pedoman bagi SQL untuk memahami tipe data apa yang diharapkan di dalam setiap kolom dan juga mengidentifikasi bagaimana SQL akan berinteraksi dengan data yang disimpan.

Catatan: Tipe data mungkin memiliki nama yang berbeda di database yang berbeda. Dan meskipun namanya sama, ukuran dan detail lainnya mungkin berbeda! Selalu periksa dokumentasinya!

Jenis Data MySQL (Versi 8.0)

Di MySQL ada tiga tipe data utama: string, numeric dan date and time.

Tipe data string:

Tipe DataDeskripsi
CHAR(size) String panjang FIXED (dapat berisi huruf, angka dan karakter khusus). Parameter ukuran menentukan panjang kolom dalam karakter – dapat dari 0 hingga 255. Default adalah 1
VARCHAR(size) String panjang VARIABEL (dapat berisi huruf, angka dan karakter khusus). Parameter ukuran menentukan panjang kolom maksimum dalam karakter – dapat dari 0 hingga 65535
BINARY(size) Sama dengan CHAR(), tetapi menyimpan string byte biner. Parameter ukuran menentukan panjang kolom dalam byte. Default-nya adalah 1
VARBINARY(size) Sama dengan VARCHAR(), tetapi menyimpan string byte biner. Parameter ukuran menentukan panjang kolom maksimum dalam byte.
TINYBLOB Untuk BLOB (Binary Large OBjects). Panjang maksimal: 255 byte
TINYTEXT Menyimpan string dengan panjang maksimal 255 karakter
TEXT(size) Menyimpan string dengan panjang maksimum 65.535 byte
BLOB(size) Untuk BLOB (Binary Large OBjects). Menyimpan hingga 65.535 byte data
MEDIUMTEXT Menyimpan string dengan panjang maksimum 16.777.215 karakter
MEDIUMBLOB Untuk BLOB (Binary Large OBjects). Menyimpan hingga 16.777.215 byte data
LONGTEXT Menyimpan string dengan panjang maksimum 4.294.967.295 karakter
LONGBLOB Untuk BLOB (Binary Large OBjects). Menyimpan hingga 4.294.967.295 byte data
ENUM(val1, val2, val3, …) Objek string yang hanya dapat memiliki satu nilai, dipilih dari daftar kemungkinan nilai. Kita dapat mendaftar hingga 65535 nilai dalam daftar ENUM. Jika nilai yang disisipkan tidak ada dalam daftar, nilai kosong akan disisipkan. Nilai diurutkan sesuai urutan yang ingin di masukkan
SET(val1, val2, val3, …) Objek string yang dapat memiliki 0 atau lebih nilai, dipilih dari daftar nilai yang memungkinkan. Kita dapat mendaftar hingga 64 nilai dalam daftar SET

Tipe data numerik:

Tipe DataDekripsi
BIT(size) Jenis nilai bit. Jumlah bit per nilai ditentukan ukurannya. Parameter ukuran dapat menampung nilai dari 1 hingga 64. Nilai default untuk ukuran adalah 1.
TINYINT(size) Bilangan bulat yang sangat kecil. Rentang signed adalah dari -128 hingga 127. Rentang unsigned  adalah dari 0 hingga 255. Parameter ukuran menentukan lebar tampilan maksimum (yaitu 255)
BOOL Nol dianggap false, nilai bukan nol dianggap true.
BOOLEAN Sama dengan BOOL
SMALLINT(size) Bilangan bulat kecil. Rentang signed adalah dari -32768 hingga 32767. Rentang unsigned adalah dari 0 hingga 65535. Parameter ukuran menentukan lebar tampilan maksimum (yaitu 255)
MEDIUMINT(size) Bilangan bulat sedang. Rentang signed adalah dari -8388608 hingga 8388607. Rentang unsigned adalah dari 0 hingga 16777215. Parameter ukuran menentukan lebar tampilan maksimum (yaitu 255)
INT(size) Bilangan bulat sedang. Rentang signed adalah dari -2147483648 hingga 2147483647. Rentang unsigned adalah dari 0 hingga 4294967295. Parameter ukuran menentukan lebar tampilan maksimum (yaitu 255)
INTEGER(size) Sama dengan INT (size)
BIGINT(size) Bilangan bulat besar. Rentang signed adalah dari -9223372036854775808 hingga 9223372036854775807. Rentang unsigned adalah dari 0 hingga 18446744073709551615. Parameter ukuran menentukan lebar tampilan maksimum (yaitu 255)
FLOAT(size, d) Bilangan floating point. Jumlah total digit ditentukan dalam ukuran. Jumlah digit setelah koma desimal ditentukan dalam parameter d. Sintaks ini sudah tidak digunakan lagi di MySQL 8.0.17 dan akan dihapus di versi MySQL mendatang
FLOAT(p) Bilangan floating point. MySQL menggunakan nilai p untuk menentukan apakah akan menggunakan FLOAT atau DOUBLE untuk tipe data yang dihasilkan. Jika p dari 0 hingga 24, tipe data menjadi FLOAT(). Jika p dari 25 hingga 53, tipe data menjadi DOUBLE()
DOUBLE(size, d) Angka floating point berukuran normal. Jumlah total digit ditentukan dalam ukuran. Jumlah digit setelah koma desimal ditentukan dalam parameter d
DOUBLE PRECISION(size, d)  Nomor titik tetap yang tepat. Jumlah total digit ditentukan dalam ukuran. Jumlah digit setelah koma desimal ditentukan dalam parameter d. Jumlah maksimal untuk ukuran adalah 65. Jumlah maksimal untuk d adalah 30. Nilai standar untuk ukuran adalah 10. Nilai standar untuk d adalah 0.
DECIMAL(size, d)
DEC(size, d) Sama dengan DECIMAL (size, d)

Catatan: Semua tipe data numerik mungkin memiliki opsi tambahan: UNSIGNED atau ZEROFILL. Jika ingin menambahkan opsi UNSIGNED, MySQL tidak akan mengizinkan nilai negatif untuk kolom tersebut. Jika ingin menambahkan opsi ZEROFILL, MySQL secara otomatis juga menambahkan atribut UNSIGNED ke kolom.

Tipe data Date and Time:

Tipe DataDeskripsi
DATE Date. Format: YYYY-MM-DD. Rentang yang didukung adalah dari ‘1000-01-01’ hingga ‘9999-12-31’
DATETIME(fsp) Kombinasi tanggal dan waktu. Format: YYYY-MM-DD hh:mm:ss. Rentang yang didukung adalah dari ‘1000-01-01 00:00:00’ hingga ‘9999-12-31 23:59:59’. Menambahkan DEFAULT dan ON UPDATE dalam definisi kolom untuk mendapatkan inisialisasi otomatis dan memperbarui ke tanggal dan waktu saat ini
TIMESTAMP(fsp) TIMESTAMP. Nilai TIMESTAMP disimpan sebagai jumlah detik sejak periode Unix (‘1970-01-01 00:00:00’ UTC). Format: YYYY-MM-DD hh:mm:ss. Rentang yang didukung adalah dari ‘1970-01-01 00:00:01’ UTC hingga ‘2038-01-09 03:14:07’ UTC. Inisialisasi otomatis dan pembaruan ke tanggal dan waktu saat ini dapat ditentukan menggunakan DEFAULT CURRENT_TIMESTAMP dan ON UPDATE CURRENT_TIMESTAMP dalam definisi kolom
TIME(fsp) Time. Format: hh:mm:ss . Rentang yang didukung adalah dari ‘-838: 59: 59’ hingga ‘838: 59: 59’
YEAR Setahun dalam format empat digit. Nilai diperbolehkan dalam format empat digit: 1901 hingga 2155, dan 0000.

MySQL 8.0 tidak mendukung tahun dalam format dua digit.

Tipe Data SQL Server

Tipe data string:

Tipe DataDeskripsiUkuran MaksimalPenyimpanan
char(n) String karakter lebar tetap 8,000 karakter Lebar yang ditentukan
varchar(n) String karakter lebar variabel 8,000 karakter 2 bytes + jumlah karakter
varchar(max) String karakter lebar variabel 1,073,741,824 karakter 2 bytes + jumlah karakter
text String karakter lebar variabel 2GB data teks 4 bytes + jumlah karakter
nchar Lebar string Unicode tetap 4,000 karakter Lebar yang ditentukan x2
nvarchar Lebar variabel string Unicode 4,000 karakter  
nvarchar(max) Lebar variabel string Unicode 536,870,912 karakter  
ntext Lebar variabel string Unicode 2GB data teks  
binary(n) String biner lebar tetap 8,000 bytes  
varbinary String biner lebar variabel 8,000 bytes  
varbinary(max) String biner lebar variabel 2GB  
image String biner lebar variabel 2GB  

Tipe data numerik:

Tipe DataDeskripsiPenyimpanan
bit Integer yang bisa 0, 1 atau NULL  
tinyint Mengizinkan bilangan bulat dari 0 hingga 255 1 byte
smallint Mengizinkan bilangan bulat antara -32.768 dan 32.767 2 bytes
int Mengizinkan bilangan bulat antara -2.147.483.648 dan 2.147.483.647 4 bytes
bigint Mengizinkan bilangan bulat antara -9.223.372.036.854.775.808 dan 9.223.372.036.854.775.807 8 bytes
decimal(p,s) Nomor presisi dan skala tetap.

Memungkinkan angka dari -10 ^ 38 +1 hingga 10 ^ 38 –1.

Parameter p menunjukkan jumlah total digit maksimum yang dapat disimpan (di kiri dan kanan koma desimal) . p harus berupa nilai dari 1 hingga 38. Default adalah 18.

Parameter s menunjukkan jumlah digit maksimum yang disimpan di sebelah kanan koma desimal. s harus berupa nilai dari 0 sampai p. Nilai defaultnya adalah 0

5-17 bytes
numeric(p,s) Nomor presisi dan skala tetap.

Memungkinkan angka dari -10 ^ 38 +1 hingga 10 ^ 38 –1.

Parameter p menunjukkan jumlah total digit maksimum yang dapat disimpan (di kiri dan kanan koma desimal) . p harus berupa nilai dari 1 hingga 38. Default adalah 18.

Parameter s menunjukkan jumlah digit maksimum yang disimpan di sebelah kanan koma desimal. s harus berupa nilai dari 0 sampai p. Nilai defaultnya adalah 0

5-17 bytes
smallmoney Data moneter dari -214.748.3648 hingga 214.748.3647 4 bytes
money Data moneter dari -922,337,203,685,477.5808 menjadi 922,337,203,685,477.5807 8 bytes
float(n) Data angka presisi mengambang dari -1,79E + 308 menjadi 1,79E + 308.

Parameter n menunjukkan apakah bidang harus menampung 4 atau 8 byte. float (24) memegang bidang 4-byte dan float (53) memegang bidang 8-byte. Nilai default dari n adalah 53.

4 or 8 bytes
real Data angka presisi mengambang dari -3,40E + 38 hingga 3,40E + 38 4 bytes

Tipe data Date dan Time:

Tipe DataDeskripsiPenyimpanan
datetime Mulai 1 Januari 1753 hingga 31 Desember 9999 dengan akurasi 3,33 milidetik 8 bytes
datetime2 Dari 1 Januari 0001 hingga 31 Desember 9999 dengan akurasi 100 nanodetik 6-8 bytes
smalldatetime Dari 1 Januari 1900 hingga 6 Juni 2079 dengan akurasi 1 menit 4 bytes
date Simpan date saja. Mulai 1 Januari 0001 hingga 31 Desember 9999 3 bytes
time Simpan time hanya dengan akurasi 100 nanodetik 3-5 bytes
datetimeoffset Sama seperti datetime2 dengan penambahan offset zona waktu 8-10 bytes
timestamp Menyimpan nomor unik yang diperbarui setiap kali baris dibuat atau diubah. Nilai stempel waktu didasarkan pada jam internal dan tidak sesuai dengan waktu nyata. Setiap tabel hanya boleh memiliki satu variabel stempel waktu  

Tipe data lainnya:

Tipe DataDeskripsi
sql_variant Menyimpan hingga 8.000 byte data dari berbagai tipe data, kecuali teks, ntext, dan timestamp
uniqueidentifier Menyimpan a globally unique identifier(GUID)
xml Menyimpan data berformat XML. Maksimal 2GB
cursor Menyimpan referensi ke kursor yang digunakan untuk operasi database
table Menyimpan kumpulan hasil untuk pemrosesan nanti

Tipe Data Microsoft Access

Tipe DataDeskripsiPenyimpanan
Text Gunakan untuk teks atau kombinasi teks dan angka. Maksimal 255 karakter  
Memo Memo digunakan untuk teks yang lebih banyak. Menyimpan hingga 65.536 karakter.

Catatan: Kita tidak bisa mengurutkan bidang memo. Namun, mereka dapat dicari

 
Byte Mengizinkan bilangan bulat dari 0 hingga 255 1 byte
Integer Mengizinkan bilangan bulat antara -32.768 dan 32.767 2 bytes
Long Mengizinkan bilangan bulat antara -2.147.483.648 dan 2.147.483.647 4 bytes
Single Floating-point presisi tunggal. Akan menangani sebagian besar desimal 4 bytes
Double Floating-point presisi ganda. Akan menangani sebagian besar desimal 8 bytes
Currency Gunakan untuk mata uang. Menampung hingga 15 digit dolar utuh, ditambah 4 tempat desimal.

Tip: Kita bisa memilih mata uang negara mana yang akan digunakan

8 bytes
AutoNumber Field AutoNumber secara otomatis memberi setiap record nomornya sendiri, biasanya mulai dari 1 4 bytes
Date/Time Gunakan untuk date and time 8 bytes
Yes/No Field logika dapat ditampilkan sebagai Yes/No, True/False, atau On/Off. Dalam kode, gunakan konstanta True dan False (setara dengan -1 dan 0).

Catatan: Nilai nol tidak diperbolehkan di field Yes/No

1 bit
Ole Object Dapat menyimpan gambar, audio, video atau BLOB lainnya (Binary Large OBjects) hingga 1GB
Hyperlink Berisi link ke file lain, termasuk halaman web  
Lookup Wizard Biarkan kamu mengetik daftar opsi, yang kemudian dapat dipilih dari daftar drop-down 4 bytes