Читайте также:
|
|
Самый простой способ заполнить символьный столбец – заключить строку в кавычки:
mysql> INSERT INTO string_tbl (char_fld, vchar_fld, text_fld)
_> VALUES ('This is char data', _> 'This is varchar data',
_> 'This is text data');
Query OK, 1 row affected (0.00 sec)
При вставке строковых данных в таблицу не забывайте, что если длина строки превышает максимальный размер символьного столбца (или за_ данный, или допустимый максимум типа данных), сервер или сформи_ рует исключение (Oracle Database), или, в случае MySQL или SQL Ser_ ver, без лишнего шума усечет строку (MySQL генерирует предупреж_ дение). Чтобы показать, как MySQL поведет себя в такой ситуации, сле_ дующее выражение update пытается обновить строкой из 46 символов столбец vchar_fld, для которого задан максимальный размер в 30 сим_ волов:
mysql> UPDATE string_tbl
_> SET vchar_fld = 'This is a piece of extremely long varchar data';
124 Глава 7. Создание, преобразование и работа с данными
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 1
Столбец изменен, но сформировано следующее предупреждение:
mysql> SHOW WARNINGS; +_________+______+________________________________________________+ | Level | Code | Message | +_________+______+________________________________________________+ | Warning | 1265 | Data truncated for column 'vchar_fld' at row 1 | +_________+______+________________________________________________+ 1 row in set (0.00 sec)
Если извлечь столбец vchar_fld, то получим:
mysql> SELECT vchar_fld
_> FROM string_tbl;
+________________________________+ | vchar_fld | +________________________________+ | This is a piece of extremely l | +________________________________+ 1 row in set (0.05 sec)
Как видите, в столбце vchar_fld размещены только первые 30 символов 46_символьной строки. Лучший способ избежать усечения строки (или формирования исключений в случае Oracle Database) при работе со столбцами типа varchar – задавать достаточно большой верхний пре_ дел длины строки, чтобы иметь возможность работать с самыми длин_ ными из предполагаемых для хранения строк (помня о том, что сервер распределяет для хранения строки лишь необходимое количество па_ мяти, т. е. при задании большого верхнего предела для столбцов типа varchar память все же не расходуется впустую).
Одинарные кавычки (апострофы)
Поскольку строки разграничиваются одинарными кавычками, необ_ ходимо быть внимательными со строками, включающими одинарные кавычки (апострофы). Например, следующую строку вставить не по_ лучится, потому что сервер подумает, что апостроф в слове «doesn’t» обозначает конец строки:
UPDATE string_tbl
SET text_fld = 'This string doesn't work';
Чтобы заставить сервер «проигнорировать» апостроф в слове «doesn’t», понадобится добавить в строку знак экранирования символа (escape). Тогда сервер будет воспринимать апостроф как обычный символ стро_ ки. Все три сервера обеспечивают возможность сохранить апостроф; для этого надо ввести непосредственно перед апострофом еще один апостроф:
mysql> UPDATE string_tbl
_> SET text_fld = 'This string didn''t work, but it does now';
Строковые данные | |
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Пользователи Oracle Database и MySQL также могут сохранить одинарную кавычку, разместив прямо перед ней обратный слэш:
UPDATE string_tbl SET text_fld =
'This string didn\'t work, but it does now'
При извлечении строки для отображения на экране или в поле сообще_ ния ее внутренние кавычки не требуют какой_либо особой обработки:
mysql> SELECT text_fld
_> FROM string_tbl;
+__________________________________________+ | text_fld | +__________________________________________+ | This string didn't work, but it does now | +__________________________________________+ 1 row in set (0.00 sec)
Однако если строка извлекается для помещения в файл, предназначен_ ный для другой программы, возможно, вы захотите вставить в извле_ ченную строку знак экранирования символа. При работе с MySQL мож_ но использовать встроенную функцию quote() (кавычка), которая за_ ключает в кавычки всю строку и добавляет знаки экранирования сим_ вола к любой одинарной кавычке/апострофу, встречающейся в строке. Вот как выглядит строка, извлеченная с применением функции quote():
mysql> SELECT QUOTE(text_fld)
_> FROM string_tbl;
+_____________________________________________+ | QUOTE(text_fld) | +_____________________________________________+ | 'This string didn\'t work, but it does now' | +_____________________________________________+ 1 row in set (0.04 sec)
При извлечении данных с целью экспорта вы, возможно, захотите применить функцию quote() ко всем символьным столбцам, сформиро_ ванным не системой, таким как столбец customer_notes (примечания клиента).
Дата добавления: 2015-08-17; просмотров: 64 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Строковые данные | | | Специальные символы |