Heim  >  Artikel  >  Datenbank  >  Analysieren Sie die Methode von MySQL zur dynamischen Änderung der Länge von varchar

Analysieren Sie die Methode von MySQL zur dynamischen Änderung der Länge von varchar

怪我咯
怪我咯Original
2017-03-30 10:54:501424Durchsuche

Obwohl diese Situation normalerweise nicht passieren sollte, wie bei unserer relationalen Datenbank, hätten wir sie im Voraus entwerfen sollen und können sie später nicht ändern, aber aufgrund der Nachlässigkeit der vorherigen Arbeit Ehrlich gesagt ist es nicht nur meine persönliche Nachlässigkeit, sondern hauptsächlich aus Kommunikationsgründen. Natürlich habe ich die Datenbank doch entworfen, also muss ich mich trotzdem selbst kritisieren.

Lassen Sie uns über die Situation sprechen: Das MySQL-Feld hat ein Varchar-Wertfeld, das zu kurz eingestellt ist, 30 sind gesetzt (ich erinnere mich vage, dass Varchar erweiterbar ist, aber die Realität ist das natürlich nicht Ich toleriere es nur vage, daher konnte ich nur eine Möglichkeit finden, die Länge des Varchar-Felds dynamisch zu ändern und gleichzeitig sicherzustellen, dass die Datenbankdaten unverändert bleiben. Nach einer Weile habe ich es endlich gefunden.

alter table 表名 modify column 字段名 varchar(数量);

Diese Funktion ist ziemlich leistungsfähig, aber ich erinnere alle daran, dass es am besten ist, solche Probleme beim Entwerfen zu vermeiden.

PS: Das Problem beim Festlegen der Varchar-Länge in MySQL

Wenn ein bestimmtes Element auf Varchar(50) eingestellt ist

dann ist es das natürlich für Englisch 50

Was ist mit Chinesisch?

UTF-8-Chinesisch belegt 3 Bytes

Kann dieser Varchar(50) also nur 16 chinesische Zeichen speichern?

mysql varchar(50) Unabhängig von Chinesisch oder Englisch werden 50 gespeichert

MySQL5-Dokument, das den Varchar-Feldtyp wie folgt beschreibt: varchar(m) variable Länge Zeichenfolge . M stellt die maximale Spaltenlänge dar. Der Bereich von M liegt zwischen 0 und 65.535. (Die maximale tatsächliche Länge eines VARCHAR wird durch die Größe der längsten Zeile und den verwendeten Zeichensatz bestimmt; die maximale effektive Länge beträgt 65.532 Byte).

Warum hat sich das so verändert? Ich finde das MySQL-Handbuch wirklich zu unfreundlich, denn man muss aufmerksam weiterlesen, um diese Beschreibung zu finden: MySQL 5.1 entspricht der Standard-SQL-Spezifikation und löscht die nachgestellten Leerzeichen von VARCHAR-Werten nicht. VARCHAR wird mit einem ein Byte oder zwei Byte langen Präfix + Daten gespeichert. Wenn die deklarierte Länge einer VARCHAR-Spalte größer als 255 ist, beträgt das Längenpräfix zwei Bytes.

Okay, ich scheine es ein wenig zu verstehen. Er sagte jedoch insbesondere, dass bei einer Länge von mehr als 255 ein 2-Byte-Längenpräfix verwendet wird. Grundschul-Subtraktionsproblem: 65535 - 2 = 65533. Ich weiß nicht, wie diese Experten es berechnet haben, also behalte ich meine Zweifel vorerst bei?

Hinweis: Ich habe mit UTF8-Kodierung getestet und die maximale Länge von Varchar beträgt 21854 Bytes.

Getestet unter MySQL-Version 5.0.45 und Datenbankkodierung utf8: Die längste Varchar-Definition ist 21785. Mit anderen Worten: Egal ob Buchstaben, Zahlen oder chinesische Schriftzeichen, es können nur 21.785 platziert werden.

Vermutung: Die maximalen Varchar-Bytes betragen 65535, und utf8 codiert ein Zeichen mit 3 Bytes 65535/3=21785.


Das obige ist der detaillierte Inhalt vonAnalysieren Sie die Methode von MySQL zur dynamischen Änderung der Länge von varchar. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn