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

Setara dengan varchar (maks) di MySQL?

Panjang maksimal varchar tunduk pada ukuran baris maksimal di MySQL, yaitu 64KB (tidak termasuk Gumpalan):

VARCHAR(65535)

Namun, perhatikan bahwa batasnya lebih rendah jika Anda menggunakan set karakter multi-byte:

VARCHAR(21844) CHARACTER SET utf8

Berikut beberapa contohnya:

Ukuran baris maksimum adalah 65535, tetapi varchar juga menyertakan satu atau dua byte untuk mengkodekan panjang string yang diberikan. Jadi, Anda sebenarnya tidak dapat mendeklarasikan varchar dengan ukuran baris maksimum, meskipun itu adalah satu-satunya kolom dalam tabel.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Tetapi jika kami mencoba mengurangi panjangnya, kami menemukan panjang terbesar yang berhasil:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Sekarang jika kita mencoba menggunakan rangkaian karakter multibyte pada tingkat tabel, kita menemukan bahwa setiap karakter dihitung sebagai beberapa byte. String UTF8 tidak seharusnya gunakan beberapa byte per string, tetapi MySQL tidak dapat berasumsi bahwa Anda akan membatasi semua penyisipan berikutnya ke karakter byte tunggal.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

Terlepas dari apa yang dikatakan kesalahan terakhir kepada kami, InnoDB masih tidak menyukai panjang 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Ini sangat masuk akal, jika Anda menghitung bahwa 21845*3 =65535, yang bagaimanapun juga tidak akan berhasil. Sedangkan 21844*3 =65532, yang berhasil.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1071 - Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 1000 byte

  2. Cara memilih nama kolom dengan spasi di MySQL

  3. Peringatan:mysql_fetch_array():argumen yang diberikan bukan hasil MySQL yang valid

  4. Langkah-langkah untuk menginstal Mysql56 di linux

  5. Perbedaan Antara Skema / Basis Data di MySQL