sql >> Database teknologi >  >> RDS >> Mysql

DataColumn MaxLength problem med MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

I det link, du angiver, står der tydeligt, at for TEXT-felter, "Den effektive maksimale længde er mindre, hvis værdien indeholder multibyte-tegn. "

UTF-8 er et Unicode-tegnsæt og standard for din database. Den bruger 1-byte-repræsentationer for de første 128 tegn, som matcher ASCII-sættet, og 4-byte-repræsentationer for resten af ​​tegnene.

Det betyder, at en TEKST-kolonne kan have flere eller færre tegn gemt alt efter om tegnene er ASCII eller ej.

Nu kommer dit problem, når MySQL-driveren ikke håndterer dette korrekt, og vil antage, at alle UTF-8-tegn er 4 bytes brede , og vil dividere kolonnelængden med de 4 bytes og overføre det til datatabellen som den faktiske feltlængde. Det betyder, at det er teknisk muligt at have noget tekst i din database, der ikke passer ind i datatabellen, som det er sket i dit tilfælde.

Løsningen (eller løsningen i dette tilfælde) på dit problem er præcis, hvad du har gjort for nu, hvilket er at ændre kolonnen til en type, der kan indeholde flere tegn, som MEDIUMTEXT eller LONGTEXT.

Mit gæt er, at denne beslutning blev truffet for at forenkle implementeringen af ​​MySQL-driveren, men jeg ville overveje at indsende en fejlrapport til Oracle.




  1. CASE og COALESCE kortslutningsevaluering fungerer med sekvenser i PL/SQL, men ikke i SQL

  2. Sammenligning af værdier i mysql baseret på tidsstempel og identifikation af tendenser

  3. PHP singleton database forbindelsesmønster

  4. Hvordan konverterer man en sekvens af tegn til et datoformat for at gemme i databasen?