Po wykonaniu poniższego zapytania SQL:
UPDATE shop_category
SET name = 'Secolul XVI - XVIII'
AND name_eng = '16th to 18th centuries'
WHERE category_id = 4768
Pojawia się następujący błąd:
1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'
Jak to naprawić?
shop_category
struktura tabeli:
category_id mediumint(8)
name varchar(250)
name_eng varchar(250)
Odpowiedzi:
Nie potrzebujesz
AND
słowa kluczowego. Oto poprawna składnia instrukcji UPDATE :źródło
Dostawałem ten wyjątek nie z powodu AND zamiast przecinka, w rzeczywistości miałem ten wyjątek tylko dlatego, że nie użyłem apostrofów w klauzuli where.
Tak jak moje zapytanie
kiedy zmieniłem klauzulę gdzie na
where column2 in ('00012121');
to zapytanie działało dobrze.źródło
STRICT_TRANS_TABLES
ustawione wsql_mode
i próbuje zaktualizować pola ograniczone (co wydawało się być) wartość liczbową wwhere
klauzuli wyrzucił błędu. Zmieniając tryby, zamiast tego wyrzucił ostrzeżenie, ale nadal nie zastosował aktualizacji. Po bliższym przyjrzeniu się, kolumna użyta w klauzuli where, pomimo tego, że miała tylko to, co wydawało się być liczbami całkowitymi, była w rzeczywistości avarchar(20)
Spróbuj wymienić
AND
z,
UPDATE Składnia przedstawia przecinek stosować jako przekładki.
źródło
Co to w zasadzie jest
To nieprawidłowa składnia powoduje, że MySQL myśli, że próbujesz zrobić coś z kolumną lub parametrem, który ma nieprawidłowy typ „DOUBLE”.
Ucz się na moim błędzie
W moim przypadku zaktualizowałem kolumnę varchar w ustawieniu tabeli, w
NULL
którym0
stała wartość . Moje zapytanie o aktualizację wyglądało tak:Teraz, ponieważ rzeczywisty typ
myValue
jestVARCHAR(255)
ostrzeżeniem:A teraz
myTable
jest praktycznie pusty, ponieważmyValue
jest terazNULL
dla KAŻDEGO RZĘDU w tabeli! Jak to się stało?* wewnętrzny krzyk *
Brakuje teraz danych w ponad 30 tys. Wierszy.
* wewnętrzny krzyk nasila się *
Dzięki Bogu za kopie zapasowe. Udało mi się odzyskać wszystkie dane.
* wewnętrzna intensywność krzyków obniża się *
Poprawione zapytanie jest następujące:
Chciałbym, żeby to było coś więcej niż tylko ostrzeżenie, więc zapomnienie tych cytatów jest mniej niebezpieczne.
* Koniec z wewnętrznym krzykiem *
źródło
Po prostu zmarnowałem na to czas i chciałem dodać dodatkowy przypadek, w którym ten błąd się pojawia.
Dane testowe
Problem w tym
ORDER BY value1+0
- rzutowanie typu.Wiem, że nie odpowiada na pytanie, ale to pierwszy wynik w Google dla tego błędu i powinien mieć inne przykłady, gdzie ten błąd się pojawia.
źródło
To ostrzeżenie będzie generować głównie nieprawidłowe ciągi zapytań.
Błąd z powodu subtelnego błędu składniowego (niewłaściwy nawias) podczas korzystania z
INSTR
funkcji:Poprawny:
źródło
Wygląda na to, że mysql z wdziękiem radzi sobie z rzutowaniem typów za pomocą instrukcji SELECT. Pole shop_id jest typu varchar, ale instrukcje select działają
Ale kiedy spróbujesz zaktualizować pola
Niepowodzenie z błędem Obcięto niepoprawną DOUBLE wartość: „1t5hxq9”
Musisz umieścić shop_id 26244317283 w cudzysłowie '26244317283', aby zapytanie działało, ponieważ pole jest typu varchar not int
źródło
Jeśli masz ten problem z wstawką, która wygląda jak ta poniżej, problemem może być po prostu brak spacji między
--
tekstem komentarza a tekstem komentarza:Problem polega na tym, że
--something
faktycznie powinno być-- something
spacja.źródło
Wystąpił ten błąd podczas korzystania z bindParam i określając PDO :: PARAM_INT, gdzie faktycznie przekazywałem ciąg. Zmiana na PDO :: PARAM_STR naprawiła błąd.
źródło
Wystąpił ten błąd, gdy próbowałem wykonać GDZIE ISTNIEJE, w którym podzapytanie pasowało do 2 kolumn, które przypadkowo były różnych typów. Te dwie tabele były również różnymi silnikami przechowywania.
Jedna kolumna to CHAR (90), a druga to BIGINT (20).
Jeden stół to InnoDB, a drugi MEMORY.
Część zapytania:
Zmiana typu kolumny w jednej kolumnie z BIGINT na CHAR rozwiązała problem.
źródło