Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема при выборке данных из таблицы.
 
 автор: SilentChild   (15.01.2012 в 22:51)   письмо автору
 
 

Добрый вечер, программисты и программистки!

Создаю определение таблицы Test:


CREATE TABLE Test (
    TestID SMALLINT NOT NULL PRIMARY KEY,
    Amount SMALLINT NOT NULL
)
ENGINE=MYISAM;


Вставляю данные:


INSERT INTO Test
VALUES (101, 12), (102, 1), (103, 139), (104, -37), (105, 0), (106, -16);


Выполняю оператор SELECT:


SELECT TestID, Amount, COT(Amount) AS Cotangent
FROM Test
ORDER BY TestID;


Пишет ошибку: DOUBLE value is out of range in `cot(<тут имя БД>.`test`.`Amount`)`

Думал, что проблема в определении столбца Amount как SMALLINT, а не как DOUBLE. Исправил на DOUBLE, но такая же ошибка выдаётся. Что такое? Будьте добры, подскажите.

  Ответить  
 
 автор: cheops   (16.01.2012 в 01:30)   письмо автору
 
   для: SilentChild   (15.01.2012 в 22:51)
 

Вообще странно, не должно быть ошибки. А где дело происходит (локальная машина, хостинг, версия сервер, где выполняются запросы)? Это единственные запросы, больше ничего не выполняете? А самое главное не включен ли у вас какой-нибудь дурацкий режим в my.ini?

Да, конечно, 0 это недопустимое значение для котангенса, но у вас просто должен быть NULL вместо ответа.

  Ответить  
 
 автор: SilentChild   (16.01.2012 в 11:35)   письмо автору
 
   для: cheops   (16.01.2012 в 01:30)
 

Дистрибутив MySQL: mysql-5.5.16-win32.msi
На локальной машине всё делаю, в командной строке.
С my.ini пока еще на "Вы", поэтому не могу знать какие режимы могут быть дурацкими. Посоветуете что-нибудь проверить?

My.ini:

# CLIENT SECTION
# ----------------------------------------------------------------------
#

[client]

port=3306

[mysql]

default-character-set=latin1


# SERVER SECTION
# ----------------------------------------------------------------------
#

[mysqld]

port=3306

basedir="C:/Program Files/MySQL/MySQL Server 5.5/"

datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"

character-set-server=latin1

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=100

query_cache_size=0

table_cache=256

tmp_table_size=18M


thread_cache_size=8


myisam_max_sort_file_size=100G

myisam_sort_buffer_size=35M

key_buffer_size=25M

read_buffer_size=64K
read_rnd_buffer_size=256K

sort_buffer_size=256K


innodb_additional_mem_pool_size=2M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=1M

innodb_buffer_pool_size=47M

innodb_log_file_size=24M

innodb_thread_concurrency=8

  Ответить  
 
 автор: cheops   (16.01.2012 в 13:31)   письмо автору
 
   для: SilentChild   (16.01.2012 в 11:35)
 

Попробуйте для начала вот эту строку убрать и перезагрузить сервер
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

PS Если на Web-ориентируетесь, то зря выбираете транзакционные таблицы InnoDB, все-равно транзакциями воспользоваться толком не получится, в скорости на обслуживании транзакций потеряете, да и кучу сопутствующих проблем поимеете.

  Ответить  
 
 автор: SilentChild   (16.01.2012 в 14:00)   письмо автору
 
   для: cheops   (16.01.2012 в 13:31)
 

Строку

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

удалил. Сервер MySQL перезапустил. Не помогло.

На счёт транзакций и InnoDB:
Вы о строчке

default-storage-engine=INNODB

в my.ini говорите? MYISAM поставить? Просто этот my.ini ставился по умолчанию вместе с MySQL и я его не редактировал.

COT(0) и вызывает проблему. Но NULL не выходит.

  Ответить  
 
 автор: cheops   (16.01.2012 в 15:09)   письмо автору
 
   для: SilentChild   (16.01.2012 в 14:00)
 

Можно MyISAM поставить, но это не принципиально, я поглядел вы в первом посту явно указываете тип таблицы, если вас это не затрудняет, можно и дальше так поступать, просто если смените значение в default-storage-engine можно будет не указывать ENGINE=MYISAM, а вот для InnoDB придется всегда явно указывать.

PS Попробую сейчас загрузить MySQL 5.5, чтобы воспроизвести ситуацию. У меня на борту только MySQL 5.1.

  Ответить  
 
 автор: SilentChild   (16.01.2012 в 15:22)   письмо автору
 
   для: cheops   (16.01.2012 в 15:09)
 

Спасибо, что уделяете время!

  Ответить  
 
 автор: cheops   (16.01.2012 в 15:32)   письмо автору
 
   для: SilentChild   (16.01.2012 в 11:35)
 

Загрузил, ошибку воспроизвел, порылся... это не штатное поведение, баг. Придется ждать исправления или откатываться на MySQL 5.1.

  Ответить  
 
 автор: SilentChild   (16.01.2012 в 18:46)   письмо автору
 
   для: cheops   (16.01.2012 в 15:32)
 

Благодарю!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования