не принимает преобразование вне диапазона. - PullRequest
0 голосов
/ 25 октября 2019

Я пишу программу Go, которая взаимодействует с MySQL.

У меня есть следующий столбец:

lot_size double(8,8)

Я принимаю фид xml и анализирую его в Go. Вот дамп данных lot_size xml data

(string) (len=4) "0.36"

Также иногда это может быть:

(string)  ""

В моей программе Go у меня есть следующее преобразование:

 if listings.Listings[i].LotSize == "" {
    lotSize=0.00000000
 } else {
    lotSize,_=strconv.ParseFloat(listings.Listings[i].LotSize,8)
 }

Mysql выдает следующую ошибку:

Error 1264: Out of range value for column 'lot_size' at row 1

Не уверен, что делать в этот момент

ОБНОВЛЕНИЕ

ЗДЕСЬвывод проанализированных данных с плавающей запятой:

(float64) 0
34 (float64) 0.410239
35 (float64) 0.045914
36 (float64) 0.325941
37 (float64) 0.208425
38 (float64) 0.078627
39 (float64) 0.132989
40 (float64) 0.163522
41 (float64) 0.24
42 (float64) 0.230119
43 (float64) 0
44 (float64) 4.25

Мой запрос sql:

insert into listings (lot_size) values (?)

stmt,err:=db.Prepare(sqlStatement)
res,err:=stmt.Exec(lotSize)

1 Ответ

1 голос
/ 25 октября 2019

Ответ, обсужденный в комментариях выше, сводится к следующему:

MySQL FLOAT(8,8) type означает, что значение может иметь восемь цифр, но все восемь должны быть справа от десятичной дроби,Это означает, что любое значение 1.0 или больше не может быть сохранено в этом столбце, если вы объявляете FLOAT с двумя аргументами, которые совпадают.

Это поведение задокументировано здесь: https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

Кстати, эта нестандартная форма FLOAT с двумя аргументами устарела в MySQL 8.0.17 и будет удалена в будущей версии MySQL. Вместо этого рекомендуется использовать DECIMAL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...