sql >> Databáze >  >> RDS >> Mysql

Problém DataColumn MaxLength s MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

Ve vámi poskytnutém odkazu je jasně uvedeno, že pro pole TEXT "Efektivní maximální délka je menší, pokud hodnota obsahuje vícebajtové znaky. "

."

UTF-8 je znaková sada Unicode a výchozí hodnota pro vaši databázi. Používá 1bajtová reprezentace pro prvních 128 znaků, které odpovídají sadě ASCII, a 4bajtová reprezentace pro zbytek znaků.

To znamená, že sloupec TEXT může mít uloženo více nebo méně znaků v závislosti na tom, zda jsou znaky ASCII či nikoli.

Nyní váš problém nastává, když to ovladač MySQL nezpracovává správně a bude předpokládat, že všechny znaky UTF-8 mají šířku 4 bajty , a vydělí délku sloupce 4 bajty a předá ji do DataTable jako skutečnou délku pole. To znamená, že je technicky možné mít v databázi nějaký text, který se nevejde do DataTable, jak se stalo ve vašem případě.

Řešením (nebo v tomto případě řešením) vašeho problému je přesně to, co jste zatím udělali, tedy změna sloupce na typ, který může obsahovat více znaků, jako MEDIUMTEXT nebo LONGTEXT.

Domnívám se, že toto rozhodnutí bylo učiněno za účelem zjednodušení implementace ovladače MySQL, ale podíval bych se na odeslání hlášení o chybě společnosti Oracle.




  1. Jak zkontrolovat duplikáty v tabulce mysql ve více sloupcích

  2. Pokud se transakce PHP PDO nezdaří, musím explicitně rollback()?

  3. Některé skvělé zprávy pro zákazníky Standard Edition v SQL Server 2014

  4. Rails neprochází dotazem DB na vyhledávacím formuláři