|
|
|
| В раблице есть поле: decimal(10,2)
Записываю туда число: 95586897,42
Захожу в phpMyAdmin, а там: 95586897,00
Почему? И как с этим бороться? | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 18:12)
| | Разобрался почему.
Видимо потому что у меня в конфиге стоит локаль:
setlocale(LC_ALL, "ru_RU.cp1251", "Russian_Russia.1251");
|
И в запрос передается число с запятой, а не с точной. А Мускула надо с точкой.
Как быть? Не обрабатывать же все float переменные str_replace()'ом ..... | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 18:12)
| | локаль php имеет слабое отношение к MySQL.
MySQL в любом случае будет выдавать наружу и ожидать на входе точки, а не запятые.
Смотря откуда идет ввод... Если, например, из числовых полей excel - то после всех проверок - именно str_replace-ом. | |
|
|
|
|
|
|
|
для: Trianon
(05.04.2007 в 18:31)
| | Не, у меня сейчас folat - переменные в браузер выводяться с запятой:
$num = (float)12.25;
echo $num;
|
Выдает: 12,25
Вот и в скрипте, я генерирую числа, произвожу подсчеты, закидываю в мускул, а они округлены.
Я сделал
И у меня в запросе за место точек, запятые. Вто я и думаю, что может и в мускул они с запятыми уходят. А мускул их из-за запятых округляет.
Может такое быть? | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 18:41)
| | >И у меня в запросе за место точек, запятые. Вто я и думаю, что может и в мускул они с
>запятыми уходят. А мускул их из-за запятых округляет.
>Может такое быть?
Если Вы запрос формируете в виде ( SET a = 12,25 ) - Вы совершенно однозначно нарушаете синтаксис.
Если в таком ( SET a = '12,25' ) - прямой ошибки нет, но дальше запятой MySQL смотреть не станет.
Запятых в числах языка SQL быть не должно.
При этом SQL-серверу совершенно фиолетово, с какой целью, когда, и вообще включали ли Вы локаль. | |
|
|
|
|
|
|
|
для: Trianon
(05.04.2007 в 19:04)
| | Ну это-то я понимаю.
Весь вопрос в том, как эти flot-локализованные переменные обрабатывать перед закидыванием в БД?
Мне только одно в голову лезент, преобразовывать их в строку, и str_replace'ом менять точку на запятую. Но ведь это, по моему, не очень эфективно.... | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 19:32)
| | так и делать. в строку их так или иначе придется преобразовать. str_replace - функция достаточно шустрая.
Кстати, а sprintf - тоже запятые порождает? | |
|
|
|
|
|
|
|
для: Trianon
(05.04.2007 в 19:38)
| | На счет sprintf не знаю, я ее вообще не доконца понимаю....
Я переделал локаль на:
setlocale(LC_CTYPE, "ru_RU.cp1251", "Russian_Russia.1251");
|
Как думаете, мне это в дальнейшем отрыгнется какими-нибудь проблемами? | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 19:52)
| | >На счет sprintf не знаю, я ее вообще не доконца понимаю....
Имелось в виду:
$val = 49.0/4;
$str = sprintf("%10.2f", $val);
echo $str;
|
>
>Я переделал локаль на:
>
setlocale(LC_CTYPE, "ru_RU.cp1251", "Russian_Russia.1251");
|
>
>Как думаете, мне это в дальнейшем отрыгнется какими-нибудь проблемами?
понятия не имею. Я стараюсь не применять локалезависимых инструментов везде, где это можно. | |
|
|
|
|
|
|
|
для: Trianon
(05.04.2007 в 19:58)
| | Да, я тоже так-то не очень хочу их применять, только без них у меня рег. выражения на хостинге отказались работать с русскими буквами.... | |
|
|
|
|
|
|
|
для: Trianon
(05.04.2007 в 18:31)
| | Отключил сейчас локаль - и все стало нормально....
НО! Касяк в том, что я не помню для чего я ее вообще включал эту локаль, но помню что для чего-то включал.... и боюсь что ее надо оставить включеной...
Но что тогда делать с запросами? | |
|
|
|