Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблем с DataColumn MaxLength с MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

Във връзката, която предоставяте, ясно се посочва, че за полетата TEXT „Ефективната максимална дължина е по-малка, ако стойността съдържа многобайтови знаци. "

UTF-8 е Unicode Charset и е по подразбиране за вашата база данни. Той използва 1-байтови представяния за първите 128 знака, които съответстват на ASCII набора, и 4-байтови представяния за останалите знаци.

Това означава, че колона TEXT може да има съхранени повече или по-малко знаци в зависимост от това дали знаците са ASCII или не.

Сега вашият проблем идва, когато драйверът на MySQL не обработва това правилно и ще приеме, че всички UTF-8 знаци са широки 4 байта и ще раздели дължината на колоната на 4-те байта и ще я предаде на DataTable като действителната дължина на полето. Това означава, че е технически възможно да имате някакъв текст във вашата база данни, който няма да се побере в DataTable, както се случи във вашия случай.

Решението (или заобиколното решение в този случай) на вашия проблем е точно това, което сте направили за момента, което е промяна на колоната към тип, който може да съдържа повече знаци, като MEDIUMTEXT или LONGTEXT.

Предполагам, че това решение е взето, за да се опрости внедряването на MySQL драйвера, но бих помислил да изпратя доклад за грешка до Oracle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Текуща дата в клаузата WHERE на MySQL

  2. Изберете увеличено цяло число

  3. SQL помощ | Списъкът за избор за оператора INSERT съдържа по-малко елементи от списъка за вмъкване

  4. Разрешения за дефиниране на изглед на MySQL и грешка 1356

  5. MySQL тип колона TIMESTAMP имплицитно включва NOT NULL DEFAULT CURRENT_TIMESTAMP ПРИ АКТУАЛИЗИРАНЕ CURRENT_TIMESTAMP