sql >> Databasteknik >  >> RDS >> Mysql

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

I länken du tillhandahåller står det tydligt att för TEXT-fält, "Den effektiva maximala längden är mindre om värdet innehåller multibyte-tecken. "

UTF-8 är en Unicode-teckenuppsättning och standard för din databas. Den använder 1-byte-representationer för de första 128 tecknen, som matchar ASCII-uppsättningen, och 4-byte-representationer för resten av tecknen.

Det betyder att en TEXT-kolumn kan ha fler eller färre tecken lagrade beroende på om tecknen är ASCII eller inte.

Nu kommer ditt problem när MySQL-drivrutinen inte hanterar detta korrekt, och antar att alla UTF-8-tecken är 4 byte breda , och kommer att dividera kolumnlängden med 4 byte och skicka det till datatabellen som den faktiska fältlängden. Det betyder att det är tekniskt möjligt att ha en del text i din databas som inte får plats i datatabellen, vilket har hänt i ditt fall.

Lösningen (eller lösningen i det här fallet) på ditt problem är precis vad du har gjort för nu, vilket är att ändra kolumnen till en typ som kan innehålla fler tecken, som MEDIUMTEXT eller LONGTEXT.

Min gissning är att detta beslut togs för att förenkla implementeringen av MySQL-drivrutinen, men jag skulle titta på att skicka en felrapport till Oracle.




  1. Stöder SQL Server CLR Integration konfigurationsfiler?

  2. Hur gör man paginering för JSON-data i PHP?

  3. Kan inte lägga till mysql-drivrutin till jboss

  4. Översikt över DBCC CheckDB-funktion