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

VARCHAR(4) przechowuje więcej znaków niż cztery

Jeśli to robisz:

  1. Utwórz lub wczytaj obiekt $o .
  2. Przypisz '12345' do danej właściwości/kolumny.
  3. Zapisz $o i niech MySQL skróci wartość do '1234' .
  4. Dostęp do właściwości/kolumny w $o i pobierz '12345' z powrotem.

wtedy widzisz jeden z problemów polegający na tym, że baza danych po cichu manipuluje danymi.

Zapis się powiódł, Twój obiekt nie ma pojęcia, że ​​MySQL obcięł dane, więc zachowuje '12345' zamiast przeładowywać tę kolumnę z bazy danych, a masz niespójne dane na swoich rękach.

Jeśli zależy Ci na tym, że MySQL po cichu obcina dane, prawdopodobnie będziesz musiał to zrobić:

  1. Utwórz/załaduj swój obiekt.
  2. Zaktualizowano właściwości.
  3. Zapisz obiekt.
  4. Wyrzuć lokalne odniesienie do obiektu.
  5. Załaduj go prosto z bazy danych, aby mieć pewność, że otrzymasz prawdziwe wartości.

Zalecam dodanie ścisłych walidacji do twoich obiektów, aby uniknąć cichego obcinania w MySQL. Włączam tryb ścisły pozwoliłoby to również uniknąć tego problemu, ale wtedy musiałbyś przejrzeć i zaostrzyć całą obsługę błędów i sprawdzanie poprawności danych (co nie byłoby tak naprawdę złe).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqld_safe Katalog '/var/run/mysqld' dla pliku gniazda UNIX nie istnieje

  2. Wyciek pamięci w PHP podczas pobierania dużego zbioru danych z MySQL

  3. Wyślij ArrayList z Androida do php MySQL

  4. Jak wyświetlić zero z rzędu przy użyciu dynamiki roku i miesiąca w przedziale?

  5. Nieznane kodowanie podczas używania df.to_sql() do pisania do MySQL przy użyciu pyodbc