Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Panjang MySQL () vs char_length ()

Di MySQL, ada banyak waktu di mana length() fungsi dan char_length() fungsi akan memberikan hasil yang persis sama. Namun, ada juga saat-saat di mana hasilnya akan sangat berbeda. Inilah alasannya.

Pertama, inilah definisi untuk masing-masing fungsi ini:

char_length()
Mengembalikan panjang string, diukur dalam karakter.
length()
Mengembalikan panjang string, diukur dalam byte.

Perhatikan “karakter” vs “byte” – satu diukur dalam karakter , yang lainnya diukur dalam byte .

Dalam banyak kasus, jumlah byte akan sama dengan jumlah karakter dalam string, tetapi ini tidak selalu terjadi. Jumlah byte yang digunakan per karakter tergantung pada bagaimana data disimpan. Misalnya, jika string disimpan sebagai data Unicode, akan ada 2 byte per karakter.

Berikut adalah contoh dasar menggunakan teks ASCII (di mana kedua fungsi mengembalikan hasil yang sama):

SELECT 
    CHAR_LENGTH('Lit'), 
    LENGTH('Lit');

Hasil:

+--------------------+---------------+
| CHAR_LENGTH('Lit') | LENGTH('Lit') |
+--------------------+---------------+
|                  3 |             3 |
+--------------------+---------------+

Dan seringkali kita akan mendapatkan hasil yang sama jika string tersebut disimpan dalam database:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Hasil:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  3 |
+-------------------------+--------------------+

Namun, jika kita mengubah kolom database untuk menyimpan data sebagai unicode:

ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) unicode;

Dan kemudian jalankan kueri yang sama lagi:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Kami mendapatkan hasil yang berbeda:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  6 |
+-------------------------+--------------------+

Ini karena unicode menyimpan setiap karakter sebagai 2 byte.

Ini mirip dengan perbedaan antara datalength() dan len() di T-SQL.

MySQL juga memiliki octet_length() fungsi, yang merupakan sinonim untuk length() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1064 kesalahan dalam CREATE TABLE ... TYPE=MYISAM

  2. Pilih nilai yang memenuhi kondisi berbeda pada baris berbeda?

  3. Manajemen akun pengguna, peran, izin, otentikasi PHP dan MySQL - Bagian 6

  4. Migrasi Laravel:kunci unik terlalu panjang, bahkan jika ditentukan

  5. Cara Menggabungkan String di MySQL dengan CONCAT()