2015-05-21 3 views
0

Я пытаюсь получить столбец в представлении, которое равно NOT NULL и bit(1). Я прочитал несколько других posts, которые предлагают использовать IF, IFNULL или CASE, чтобы создать столбец NOT NULL. Проблема с этим подходом заключается в том, что вы возвращаете INT или другой тип. Я хочу bit(1).MySQL - NOT NULL бит (1) столбец в поле зрения

Вместо этого я создал функцию, которая правильно возвращает столбец bit(1), который я хочу, но он по-прежнему отображается как NULL.

#Suggestion from Alex - returns bit(1) NULL 
CREATE FUNCTION `cast_to_boolean`(n integer) RETURNS bit(1) 
BEGIN 
RETURN IFNULL(n,0); 
END 

#Without IFNULL - returns bit(1) NULL 
CREATE FUNCTION `cast_to_boolean2`(n integer) RETURNS bit(1) 
BEGIN 
RETURN IFNULL(n,0); 
END 

Вот пример, показывающий оба подхода не работают:

CREATE 
VIEW `sample` AS 
    select 
     cast_to_boolean(0) AS `Resuult 1`, 
     cast_to_boolean2(0) AS `Resuult 2` 

    #now display the proc 

    SHOW FULL COLUMNS FROM sample; 

Результаты

enter image description here

+0

Вы могли бы удалить все данные, которые вам не нужны в вашем примере, и объяснить, что вам нужно? – Alex

+0

Алекс, я думаю, что этот пример важен, поскольку он объясняет, что уже было пробовано, на основе предложений в других сообщениях. В названии говорится все, мне нужно, чтобы столбец выглядел как бит (1) и NOT NULL. – Brian

ответ

0

Я не уверен, что ваша точка, но только, чтобы вернуться BIT(1) и никогда не возвращать NULL, вы можете изменить процедуру:

CREATE FUNCTION `cast_to_boolean`(n integer) RETURNS bit(1) 
BEGIN 
RETURN IFNULL(n,0); 
END 
+0

Алекс, ты попробовал это и заработал? Я все еще получаю значение NULL - MySql 5.5.39 в Windows. T3 - cast_to_boolean \t бит (1) \t \t ДА – Brian

+0

Да, я попробовал. И, как я уже сказал, проблема в том, что я не понимаю вашу цель. Итак, вы пытаетесь получить тип BIT (1) из своей функции? или 'seeull = NO' где-то после объявления объявления? если ваша точка, чтобы увидеть null = NO, вы можете продолжать свое «я», потому что я не вижу причин для этого. поскольку VIEW - это просто представление некоторых данных, это не таблица для вставки. Но ключевое слово «NOT NULL» имеет смысл для сервера mysql только для контекста «INSERT», когда механизм mysql проверяет, что данные не имеют нулевого значения. Поэтому я бы беспокоился о реальных данных, возвращаемых функцией, которые я исправил. – Alex

+0

Я получаю бит (1) назад, но проблема в том, что столбец в представлении по-прежнему задан как nullable. Причина, по которой мне нужно, чтобы она была недействительной, заключается в том, что представления используются для генерации кода и столбцов, которые допускают нули и столбцы, которые не допускают нули, обрабатываются по-разному с помощью генерации кода. – Brian

Смежные вопросы