MySQL Identifier Вопрос - PullRequest
       7

MySQL Identifier Вопрос

1 голос
/ 27 августа 2009

Из вопросов примера руководства по сертификации MySQL ...

вопрос

Will the following SQL statement succeed or result in an error? Assume that the table to be created doesn't already exist.

CREATE TABLE MD5 (id INT);

ответ

The statement results in an error if the IGNORE_SPACE SQL mode is enabled. In that case, all function names become reserved words and the statement would return an error because MD5 is a function name.

If the IGNORE_SPACE SQL mode is not enabled, the statement succeeds:

mysql> CREATE TABLE MD5 (id INT);
Query OK, 0 rows affected


Note that the IGNORE_SPACE SQL mode is part of the ANSI SQL mode. 

Почему они говорят о пространствах? У кого-нибудь есть идеи? Какой будет правильный ответ? Это терпит неудачу, потому что функция - зарезервированное слово? Будет ли это успешно, когда цитируется, например. с обратной чертой ... верно?

Ответы [ 2 ]

2 голосов
/ 27 августа 2009
Режим

IGNORE_SPACE допускает пробелы между именем функции и следующей круглой скобкой. Если он включен, все имена функций становятся зарезервированными словами, поскольку MySQL не может определить, вызываете ли вы функцию или объявляете (используете) идентификатор.

Следовательно, если он включен, ваш CREATE TABLE завершится ошибкой и следующее:

SELECT MD5 (some_column) FROM some_table

будет работать. Если IGNORE_SPACE отключен, произойдет обратное (CREATE TABLE будет работать, а выше SELECT не будет, потому что между именем функции и круглыми скобками есть пробел).

0 голосов
/ 27 августа 2009

IGNORE_SPACE будет игнорировать пробелы между именем потенциальной функции и (

Страница руководства Mysql по разрешению функций объясняет все это , но вот краткая версия:

SELECT md5(colum1) FROM table;

Применяет функцию md5 к colum1.

 SELECT md5 (colum1) FROM table;

Применяет функцию md5, если включена IGNORE_SPACE, к colum1.

Если IGNORE_SPACE выключен, «md5 (» не обрабатывается как вызов функции, потому что там есть пробел.

Установка обратных галочек делает Mysql не тем, что слово является именем функции, а некоторым идентификатором базы данных, таблицы, столбца и т. Д.

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