Подтвердить что ты не робот

Код ошибки 1292 - Усеченное неправильное значение DOUBLE - Mysql

Я не уверен, что это за ошибка!

#1292 - Truncated incorrect DOUBLE value: 

У меня нет поля или данных двойного значения!

Я потратил целый час, пытаясь понять это!

вот мой запрос

INSERT INTO call_managment_system.contact_numbers 
    (account_id, contact_number, contact_extension, main_number, created_by)
SELECT
    ac.account_id,
    REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') AS Phone,
    IFNULL(ta.ext, '') AS extention,
    '1' AS MainNumber,
    '2' AS created_by
FROM 
    cvsnumbers AS ta
    INNER JOIN accounts AS ac ON ac.company_code = ta.company_code
WHERE 
    LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') ) = 10

вот моя таблица создания таблицы для таблицы, результаты которой идут в

CREATE TABLE `contact_numbers` (  
    `number_id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
    `account_id` int(10) unsigned NOT NULL DEFAULT '0',  
    `person_id` int(11) NOT NULL DEFAULT '0',  
    `contact_number` char(15) NOT NULL,  
    `contact_extension` char(10) NOT NULL DEFAULT '',  
    `contact_type` enum('Primary','Direct','Cell','Fax','Home','Reception','Office','TollFree') NOT NULL DEFAULT 'Primary',  
    `contact_link` enum('Account','PDM','Other') NOT NULL DEFAULT 'Account',  
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 = inactive, 1=active', 
    `main_number` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 = main phone number',  
    `created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
    `created_by` int(11) NOT NULL,  
    `modified_on` datetime DEFAULT NULL,  
    `modified_by` int(11) NOT NULL DEFAULT '0',  
    PRIMARY KEY (`number_id`),  
    KEY `account_id` (`account_id`),  
    KEY `person_id` (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=534 DEFAULT CHARSET=utf8
4b9b3361

Ответ 1

Это сообщение означает, что вы пытаетесь сравнить число и строку в предложении WHERE или ON. В вашем запросе единственным потенциальным местом, где это может произойти, является ON ac.company_code = ta.company_code; либо убедитесь, что у них похожие объявления, либо используйте явный CAST для преобразования числа в строку.

Если вы отключите режим strict, ошибка должна превратиться в предупреждение.

Ответ 2

Я исправил эту ошибку, поскольку в запросе была синтаксическая ошибка или некоторые нежелательные символы, но MySQL не смог ее перехватить. Я использовал and между несколькими полями во время обновления, например

update user 
set token='lamblala', 
    accessverion='dummy' and 
    key='somekey' 
where user = 'myself'

Проблема в приведенном выше запросе может быть решена путем замены and запятой (,)

Ответ 3

Я столкнулся с той же проблемой. Попытка сравнить столбец varchar (100) с числовым номером 1. В результате ошибка 1292. Исправлено добавлением одиночных кавычек вокруг 1 ('1').

Спасибо за объяснение выше

Ответ 4

TL; DR

Это также может быть вызвано применением OR к строковым столбцам/литералам.

Полная версия

Я получил то же сообщение об ошибке для простого оператора INSERT включающего представление:

insert into t1 select * from v1

хотя все исходные и целевые столбцы были типа VARCHAR. После некоторой отладки я нашел основную причину; представление содержало этот фрагмент:

string_col1 OR '_' OR string_col2 OR '_' OR string_col3

который предположительно был результатом автоматического преобразования следующего фрагмента из Oracle:

string_col1 || '_' || string_col2 || '_' || string_col3

(|| - конкатенация строк в Oracle). Решение было использовать

concat(string_col1, '_', string_col2, '_', string_col3)

вместо.

Ответ 5

Когда я получил эту ошибку, я считаю, что это ошибка, однако вы должны иметь в виду, что если вы выполняете отдельный запрос с инструкцией SELECT и тем же предложением WHERE, вы можете получить первичный идентификатор из этого SELECT: SELECT CONCAT(primary_id, ',')) и вставить их в сбойный запрос UPDATE с условиями → "WHERE [primary_id] IN ([список первичного идентификатора с разделителями-запятыми из инструкции SELECT)", который позволяет вам смягчать любые проблемы, вызванные оригиналом ( не удалось) запросить предложение WHERE.

Для меня лично, когда я использовал кавычки для значений в "WHERE ____ IN" ([значения здесь]), пострадали только 10 из 300 ожидаемых записей, которые, на мой взгляд, кажутся ошибкой,

Ответ 6

Я получаю схожую ошибку:

sql> UPDATE im_business_info SET amount = 145.95 WHERE ref = 2387
[2017-08-31 19:28:19] [22007][1292] Truncated incorrect DOUBLE value: '000425/17'
[2017-08-31 19:28:19] [22001][1292] Data truncation: Truncated incorrect DOUBLE value: '000425/17'.

Сумма является плавающей.

amount DOUBLE NOT NULL;

Ответ 7

В моем случае это была вставка представления (с высокой степенью вложенности, представление в представлении), вызывающая ошибку в :

CREATE TABLE tablename AS
  SELECT * FROM highly_nested_viewname
;

Обходное решение, которое мы в итоге сделали, имитировало материализованное представление (которое на самом деле является таблицей) и периодически вставляло/обновляло его, используя хранимые процедуры.

Ответ 8

Возникла эта проблема с ES6 и TypeORM при попытке передать .where("order.id IN (:orders)", { orders }), где orders была разделенной запятыми строкой чисел. Когда я преобразовал шаблонный литерал, проблема была решена.

.where('order.id IN (${orders})');

Ответ 9

Возможно, эта ошибка возникла из-за использования оператора неравенства != в предложении where со списком нескольких значений or, таких как

where columnName !=('A'||'B')

Это можно решить с помощью

where columnName not in ('A','B')