sql >> Database >  >> RDS >> Mysql

MYSQL - Hoe de rijgroottelimiet van 66 KBytes te omzeilen

Het geaccepteerde antwoord is fout (of op zijn minst behoorlijk eigenwijs) - Ik wil persoonlijk niet dat gegevens buiten mijn database worden opgeslagen, omdat dit complicaties veroorzaakt in termen van back-upprocedures en transactiequery's.

Zoals anderen al hebben opgemerkt, stelt de handleiding herhaaldelijk dat BLOB- en TEXT-kolommen niet meetellen voor de totale rijgrootte, maar helaas, met de standaardconfiguratie-instellingen, is dat niet waar, en krijg je uiteindelijk deze foutmelding. (Het foutbericht slaat nergens op, omdat het je vertelt om TEKST te gebruiken in plaats van VARCHAR om het probleem aan te pakken - wat je al bent.)

De reden voor deze beperking is het standaard opslagmechanisme, Antelope , die de eerste 768 bytes aan kolommen met variabele lengte in de rij opslaat - en een mogelijke oplossing is om INNODB te gebruiken en uw opslagmechanisme over te schakelen naar het alternatief Barracuda opslagmechanisme:

SET GLOBAL innodb_file_format=Barracuda;

Dit heeft geen onmiddellijk effect, omdat deze instelling een standaardinstelling is voor nieuwe databasebestanden - u zult dus uw hele database moeten verwijderen en opnieuw moeten maken.

U kunt ook overschakelen naar Barracuda (zoals hierboven) en vervolgens (aanvullend) overschakelen naar de strategie voor bestanden per tafel:

SET GLOBAL innodb_file_per_table=ON;

Nogmaals, dit heeft geen onmiddellijk effect, omdat beide instellingen standaard zijn voor nieuwe tabellen - dus nogmaals, u moet de tabel verwijderen en opnieuw maken.

Als u daarna in de MySQL-gegevensmap kijkt, kunt u bevestigen dat er aparte bestanden zijn gemaakt, b.v. voor een database met de naam "data" en een tabel met de naam "test", zou u een bestand met de naam "data/test/bigtable.ibd" moeten zien.

Als je de algemene instellingen in MySQL niet wilt wijzigen, probeer dan SET SESSION in plaats van SET GLOBAL , bijv. onmiddellijk voordat u uw CREATE TABLE . uitvoert verklaringen.



  1. Twee query's combineren om te controleren op duplicaten in MySQL?

  2. Kan ik COUNT() en DISTINCT samen gebruiken?

  3. DATE() Voorbeelden – MySQL

  4. Mysql datetime index werkt niet bij gebruik van 'like'