Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem DataColumn MaxLength z MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

W podanym linku wyraźnie widać, że w przypadku pól TEKST:„Efektywna maksymalna długość jest mniejsza, jeśli wartość zawiera znaki wielobajtowe. "

UTF-8 to zestaw znaków Unicode i domyślny dla twojej bazy danych. Wykorzystuje reprezentacje 1-bajtowe dla pierwszych 128 znaków, które pasują do zestawu ASCII, oraz reprezentacje 4-bajtowe dla pozostałych znaków.

Oznacza to, że kolumna TEXT może zawierać więcej lub mniej znaków w zależności od tego, czy są to znaki ASCII, czy nie.

Teraz twój problem pojawia się, gdy sterownik MySQL nie obsługuje tego prawidłowo i przyjmie, że wszystkie znaki UTF-8 mają szerokość 4 bajtów i podzieli długość kolumny przez 4 bajty i przekaże ją do DataTable jako rzeczywistą długość pola. Oznacza to, że technicznie możliwe jest posiadanie w bazie danych tekstu, który nie zmieści się w DataTable, jak to miało miejsce w twoim przypadku.

Rozwiązaniem (lub obejściem w tym przypadku) Twojego problemu jest dokładnie to, co na razie zrobiłeś, czyli zmiana kolumny na typ, który może zawierać więcej znaków, np. MEDIUMTEXT lub LONGTEXT.

Domyślam się, że ta decyzja została podjęta w celu uproszczenia implementacji sterownika MySQL, ale chciałbym przesłać raport o błędzie do 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. Gdy pętla PHP get_result nie działa

  2. SQL, aby pobrać tylko niektóre wiersze?

  3. Jak mogę użyć wielu instrukcji WHERE podczas używania IN z tablicą?

  4. Używanie bulk_update_mappings w SQLAlchemy do aktualizowania wielu wierszy z różnymi wartościami

  5. Przenieś dane z jednej tabeli MySQL do drugiej