SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.02.2013 23:56:09

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Можно ли записать в базу байт

У меня есть номера длиной до 255 символов. Я хочу записать его не в виде трехзначного числа, а в виде одного байта. Возможно ли такое?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 16.02.2013 00:01:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Можно ли записать в базу байт

Используйте тип UNSIGNED TINYINT
http://dev.mysql.com/doc/refman/5.5/en/ … types.html

Неактивен

 

#3 16.02.2013 00:19:51

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо, за ответ. Т.е. мне прямо так его и записывать как число от 0 до 255? Или как число от -128 до 127? Попробовал в heidiSQL в виде 255 записать, а он мне в 127 переправил. И что он мне вернет? Т.е. скажем я не смогу хранить в нем букву или другой символ, как таковой. И при выборке получу число, которое мне нужно будет уже интерпретировать в нужный мне символ?

Отредактированно platedz (16.02.2013 00:20:16)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 16.02.2013 00:52:55

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Можно ли записать в базу байт

Обратите внимание на параметр UNSIGNED, если он указан в определении типа, то число от 0 до 255, если нет, то от -128 до 127.
Превратить число в символ можно функцией CHAR: http://dev.mysql.com/doc/refman/4.1/en/ … ction_char

Неактивен

 

#5 16.02.2013 08:45:31

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Большое спасибо за ответ, теперь вроде понятно.
Подскажите, пожалуйста. Вот у меня список слов, около полутора миллиона. Мне нужно сделать вывод по первому символу 0-9а-яa-z. Есть ли смысл сделать отдельную таблицу для этого TINYINT с одним первым символом? Ускорит ли это дело? Тем более ведь иначе придется использовать like


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#6 16.02.2013 08:55:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

Если поиск именно по _первому_ символу, то тут скорее индекс стоит создать на то поле, в котором слово содержится. Достаточно будет индекса на первый символ этого поля. Ну и искать потом запросами
select * from t where `field` like 'a%';
или
select * from t where `field` like 'b%';


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 16.02.2013 09:11:25

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Я к тому, что like же он по производительности более тяжелый считается, насколько я знаю. Как быстрее будет происходить выполнение запроса, если я сделаю отдельную таблицу с TINYINT или буду использовать Like по первому символу? Или, если делать отдельную таблицу, может проще записать символ не в виде байта, числа, а в виде символа, или пары символом, если мне нужно будет сделать поиск по первым двум символам. И в каком виде лучше всего хранить эти пары символов в базе?
Также возник вопрос по типу int. В таблице указано, что его длина 4 байта, но ведь ему можно указать точный параметр. Как рассматривается ситуация когда я указываю конкретную длину символов параметру int, например укажу int(10). Тогда ведь он уже будет больше 4 байт получается?

Отредактированно platedz (16.02.2013 09:13:59)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#8 16.02.2013 09:51:33

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

like не будет более тяжелый в том варианте, который я приводил постом выше, потому что будет использовать индекс.
Про отдельную таблицу не совсем понятно - зачем Вы хотите ее ввести? Что это даст?
Про int(1) - это означает, что он может вместить 10 цифр smile. Но посмотрите лучшетабличку, там про каждый тип прописано, какие числа он вмещает.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 16.02.2013 10:10:18

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Отдельную таблицу ввести, чтобы делать поиск по одному номеру. Я предполагаю, что это должно ускорить выборку, т.к. запрос будет весить всего один байт. Или я ошибаюсь? Но тогда зачем вообще использовать TINYINT и другие типы. Те же varchar и тд.
Про Int  и остальные типы не очень понятно. Т.е. int(число). Что здесь число, пробовал в heidisql ставить разную длину, но независимо ни от чего на выходе получал максимальное число согласно таблице


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#10 16.02.2013 10:20:52

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

Создайте индекс и составляйте запросы, как я описал выше и будет счастье.
Насчет hedisql не подскажу, к сожалению.
Давайте с другой стороны зайдём - каков максимальный размер числа, которое  Вам нужно в таблицу помещать?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 16.02.2013 11:02:31

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо за ответ.
По поводу индекса если можно подробнее. Я так понимаю нужно добавить параметр index наподобие primary key.
В like я так понял, он используется для того, чтобы урезать строку если поиск начинается с конкретного символа. в like="a%" (и для Like верно только то условие, при котором искомое выражение начинается с символа, но не с %) mysql ищет первый символ, а не рассматривает всю строку. Но тогда не ясно, что же происходит без индекса. Ведь он тоже рассматривает первый символ, а не рассматривает всю строку, т.к. это бессмысленно.

heidisql я упомянул, т.к. пробовал в нем. Т.е. если что-то не так, то можно сослаться на работу конкретной программы.
Максимальный размер числа, скажем длиной 21. (999999999999999999999)

Отредактированно platedz (16.02.2013 11:03:57)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#12 16.02.2013 11:54:02

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

Смотрите здесь
В Вашем случае что-то вроде CREATE INDEX word_index ON t (word(1));
Запрос, который использует индекс, конечно же ничего не урезает, просто индекс помогает быстро найти нужные строки.
Если индекс не используется, то идёт полный перебор.

Что касается больших чисел - bigint unsigned поддерживает числа от 0 до 18446744073709551615,
надеюсь Вам этого хватит wink?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 16.02.2013 12:56:16

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо за ответ. Я честно говоря не очень понял, что делает Index. B частности тот Здесь http://веб-информ.рф/mysql/MySQL_indexes.html написано, что следующий синтаксис работать не будет

SELECT * FROM tbl_name WHERE key_col LIKE "%Patrick%";

Также написано

mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Pat%_ck%";
В первой команде рассматриваются только строки с "Patrick" <= key_col < "Patricl", а во второй - только строки с "Pat" <= key_col < "Pau".

И второй случай мне и вовсе не понятен?

Т.е. правильно ли я понимаю, что при параметре index, поиск все-таки ведется сначала строки?

Что означают дополнительные параметры в word(1)? Что нужно вести поиск только в первом символе? В word(10) в первых 10 символах?

И все-таки неяcно для чего в int числовой параметр?

Отредактированно platedz (16.02.2013 13:43:32)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#14 16.02.2013 17:34:06

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

Вот так:
SELECT * FROM tbl_name WHERE key_col LIKE "%Patrick%";
индекс работать не будет
А вот так
SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
будет.

Т.е. правильно ли я понимаю, что при параметре index, поиск все-таки ведется сначала строки?

Совершенно не понял эту фразу.

Что означают дополнительные параметры в word(1)? Что нужно вести поиск только в первом символе? В word(10) в первых 10 символах?

word(1) означает, что индекс строится только по первому символу.

И все-таки неяcно для чего в int числовой параметр?

Я писал вроде выше, не? А еще я писал, что нужно внимательно посмотреть сюда, вопросы и отпадут сами.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#15 16.02.2013 17:56:22

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Ну хорошо я ставлю word(1)
Что будет происходить в таком запросе?
SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
Будет ли работать индекс?

Про то, что длина Int ограничивается количеством байт, я понял. А вот про аргумент, который передается дополнительно, зачем он нужен и что делаен не понял.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#16 16.02.2013 18:03:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Можно ли записать в базу байт

Что происходит в запросе Вы можете посмотреть через explain.
Сравните
explain SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
с индексом и без индекса.

Аргумент, который передаётся инту дополнительно я никогда не использую, и Вам не советую, пользуйтесь данными из таблицы, ссылку которую я в предыдущем и не только посте.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#17 16.02.2013 23:32:02

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

За explain большое спасибо, как только разберусь с базой попробую с помощью него посмотреть что да как, да и почитать не мешает про index и про explain.

А вот с int непонятно. Понятно, что нужно пользоваться таблицей, но мне так и не ясно для чего этот параметр, если на деле он не работает?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#18 16.02.2013 23:58:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Можно ли записать в базу байт

platedz написал:

Про то, что длина Int ограничивается количеством байт, я понял. А вот про аргумент, который передается дополнительно, зачем он нужен и что делаен не понял.

http://sqlinfo.ru/forum/viewtopic.php?id=5050

Неактивен

 

#19 17.02.2013 00:39:52

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо, с Int вопросов больше нет.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#20 25.02.2013 00:10:11

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Подскажите, пожалуйста, по поводу длины символов char и varchar. Скажем я задал длину символов varchar(3). И записал в нее "ФЫВ" Т.е. впринципе оно туда наверное влезает, тк. занимает всего три байта. А если у меня кодировку не cp1251, а utf-8, получается что каждый символ туда не поместиться?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#21 25.02.2013 00:43:49

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Можно ли записать в базу байт

Если varchar(3) кодировки utf8, то он будет занимать 9 байт. Будьте внимательны к кодировкам, в которых хранятся таблицы.

Неактивен

 

#22 25.02.2013 00:57:22

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо за ответ. Т.е. он так и будет урезать по количеству символов, а не по количеству байт? Т.е. скажем если я напишу фыва, то в любом случае получу фыв? И соответственно, с char тоже также, будет 9 байт вместо трех если я укажу char(3)?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#23 25.02.2013 01:16:10

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

А еще подскажите, пожалуйста, по поводу значения not null если я при этом не заношу никакого значения по умолчанию, то что получается? Я к тому, что если мне не нужно записывать никаких значений, то что мне лучше назначить по умолчанию not null  или null? И в чем между ними разница?

Отредактированно platedz (25.02.2013 01:17:12)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#24 25.02.2013 12:33:34

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Можно ли записать в базу байт

Если NOT NULL, то значения по умолчанию не будет, но при вставке MySQL добавит 0 для целых и пустую строку для символьных переменных, при этом сгенерировав Warning (при @@sql_mode='TRADITIONAL'; вместо предупреждения будет генерироваться ошибка).

Неактивен

 

#25 25.02.2013 12:43:08

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Можно ли записать в базу байт

Спасибо за ответ, т.е. не надо писать default '' или default '0', тк. они будут создаваться в любом случае, или может быть есть какие-то настройки этого, в связи с которыми лучше все-таки писать?

Отредактированно platedz (25.02.2013 12:44:12)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson