Jeśli spróbujesz utworzyć kolumnę TEXT w tabeli i nadasz jej domyślną wartość w MySQL, pojawi się błąd (przynajmniej w systemie Windows). Nie widzę żadnego powodu, dla którego kolumna tekstowa nie powinna mieć wartości domyślnej. Dokumentacja MySQL nie zawiera wyjaśnień. Wydaje mi się to nielogiczne (i nieco frustrujące, ponieważ chcę wartości domyślnej!). Czy ktoś wie, dlaczego nie jest to dozwolone?
mysql
default-value
Russ
źródło
źródło
TEXT
Ma też na myśli - te kolumny nie mogą mieć wartości domyślnej.VARCHAR
mogą.Odpowiedzi:
Windows MySQL v5 zgłasza błąd, ale Linux i inne wersje zgłaszają tylko ostrzeżenie. To musi zostać naprawione. WTF?
Zobacz także próbę rozwiązania tego problemu jako błędu # 19498 w narzędziu Bugtracker MySQL:
Osobiście uważam to za błąd. Wyszukiwanie „BLOB / TEKST kolumna nie może mieć wartości domyślnej” zwraca około 2940 wyników w Google. Większość z nich to raporty niezgodności podczas próby zainstalowania skryptów DB, które działały w jednym systemie, ale nie w innych.
Mam teraz ten sam problem w aplikacji internetowej, którą modyfikuję dla jednego z moich klientów, pierwotnie wdrożonej na Linux MySQL v5.0.83-log. Korzystam z systemu Windows MySQL 5.1.41. Nawet próbując użyć najnowszej wersji phpMyAdmin do wyodrębnienia bazy danych, nie zgłasza wartości domyślnej dla danej kolumny tekstowej. Jednak gdy próbuję uruchomić wstawkę w systemie Windows (która działa dobrze w przypadku wdrożenia w systemie Linux), pojawia się błąd braku wartości domyślnej w kolumnie ABC. Próbuję odtworzyć lokalnie tabelę z oczywistymi wartościami domyślnymi (w oparciu o wybór unikalnych wartości dla tej kolumny) i ostatecznie otrzymuję bardzo przydatną kolumnę BLOB / TEXT nie może mieć wartości domyślnej .
Ponownie, brak zachowania podstawowej kompatybilności na różnych platformach jest niedopuszczalny i jest błędem.
Jak wyłączyć tryb ścisły w MySQL 5 (Windows):
Edytuj /my.ini i poszukaj linii
Zamień na
Uruchom ponownie usługę MySQL (zakładając, że jest to mysql5)
Jeśli masz uprawnienia roota / administratora, możesz być w stanie wykonać
źródło
Bez dogłębnej znajomości silnika mySQL powiedziałbym, że brzmi to jak strategia oszczędzania pamięci. Zakładam, że powodem jest ten akapit z dokumentów :
Wygląda na to, że wstępne wypełnienie tych typów kolumn doprowadziłoby do zużycia pamięci i pogorszenia wydajności.
źródło
Możesz uzyskać taki sam efekt jak wartość domyślną, używając wyzwalacza
źródło
Jako główne pytanie:
wciąż nie ma odpowiedzi, zrobiłem szybkie wyszukiwanie i znalazłem stosunkowo nowy dodatek od programisty MySQL w MySQL Bugs :
To nie jest jednoznaczna odpowiedź, ale przynajmniej punkt wyjścia do pytania dlaczego .
W międzyczasie po prostu koduję wokół niego i albo nadam kolumnie wartość zerową, albo jawnie przypisam (domyślną
''
) wartość każdemuinsert
z kodu aplikacji ...źródło
„Wsparcie dla DOMYŚLNYCH w kolumnach TEKST / BLOB” to żądanie funkcji w MySQL Bugtracker (Bug # 21532) .
Widzę, że nie jestem jedynym, który chciałby umieścić wartość domyślną w kolumnie TEKST. Myślę, że ta funkcja powinna być obsługiwana w późniejszej wersji MySQL.
Nie można tego naprawić w wersji 5.0 MySQL, ponieważ najwyraźniej spowodowałoby to niekompatybilność i utratę danych, gdyby ktoś próbował przenieść bazę danych tam iz powrotem między (obecnymi) bazami danych, które nie obsługują tej funkcji, a dowolnymi bazami danych, które obsługiwały ta funkcja.
źródło
Zwykle prowadzę witryny w systemie Linux, ale rozwijam się również na lokalnym komputerze z systemem Windows. Natknąłem się na ten problem wiele razy i właśnie naprawiłem tabele, gdy napotkałem problemy. Wczoraj zainstalowałem aplikację, aby komuś pomóc, i oczywiście znów napotkałem problem. Zdecydowałem więc, że nadszedł czas, aby dowiedzieć się, co się dzieje - i znalazłem ten wątek. Naprawdę nie podoba mi się pomysł zmiany trybu sql_serwera na tryb wcześniejszy (domyślnie), więc wpadłem na proste (jak sądzę) rozwiązanie.
To rozwiązanie wymagałoby oczywiście od twórców zawinięcia skryptów tworzenia tabel, aby zrekompensować problem MySQL działający w systemie Windows. Podobne pojęcia zobaczysz w plikach zrzutu. Jednym DUŻYM zastrzeżeniem jest to, że może to powodować problemy, jeśli partycjonowanie jest używane.
O to chodzi.
źródło
W przypadku Ubuntu 16.04:
Jak wyłączyć tryb ścisły w MySQL 5.7:
Edytuj plik /etc/mysql/mysql.conf.d/mysqld.cnf
Jeśli poniżej znajduje się wiersz w mysql.cnf
Następnie zamień na
Inaczej
Po prostu dodaj poniżej wiersza w mysqld.cnf
To rozwiązało problem.
źródło