sql >> Database >  >> RDS >> Mysql

DataColumn MaxLength-probleem met MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

In de link die u geeft, staat duidelijk dat voor TEKST-velden:"De effectieve maximale lengte is minder als de waarde multibyte-tekens bevat. "

UTF-8 is een Unicode-tekenset en de standaard voor uw database. Het gebruikt 1-byte-representaties voor de eerste 128 tekens, die overeenkomen met de ASCII-set, en 4-byte-representaties voor de rest van de tekens.

Dit betekent dat een TEXT-kolom meer of minder tekens kan bevatten, afhankelijk van of de tekens ASCII zijn of niet.

Nu komt uw probleem wanneer het MySQL-stuurprogramma dit niet goed afhandelt, en aanneemt dat alle UTF-8-tekens 4 bytes breed zijn , en deelt de kolomlengte door de 4 bytes en geeft die door aan de gegevenstabel als de werkelijke veldlengte. Dit betekent dat het technisch mogelijk is om tekst in uw database te hebben die niet in de DataTable past, zoals in uw geval is gebeurd.

De oplossing (of tijdelijke oplossing in dit geval) voor uw probleem is precies wat u tot nu toe hebt gedaan, namelijk de kolom wijzigen in een type dat meer tekens kan bevatten, zoals MEDIUMTEXT of LONGTEXT.

Ik vermoed dat deze beslissing is genomen om de implementatie van het MySQL-stuurprogramma te vereenvoudigen, maar ik zou overwegen een bugrapport in te dienen bij Oracle.




  1. MIN en MAX geaggregeerde functies in SQL Server

  2. PDO invoegen in DB

  3. Hoe gebruik je XPath met een variabele in Oracle XMLTable?

  4. sql - groepeer op in bereiken om bereiken zonder waarden op te nemen